Una domanda sorprendente: trovo che l'intento di list.Any()
sia molto più chiaro dell'intento di list.Count()!=0
.
Intenti significa: se leggi il codice di qualcuno (e non lo hai scritto tu stesso), è del tutto ovvio ciò che il programmatore vuole raggiungere e perché ha scritto scritto così com'è? Se un problema comune viene risolto in un modo inutilmente complesso, vieni immediatamente sospettoso e ti chiedi perché lo sviluppatore non abbia usato il modo semplice. Guardi attraverso il codice e provi a vedere se hai perso qualcosa. Hai paura di cambiare il codice perché ti preoccupi che ci sono alcuni effetti collaterali che ti mancano e cambiarlo potrebbe causare problemi imprevisti.
L'intenzione di utilizzare il metodo Any()
è completamente chiara: vuoi sapere se ci sono elementi nella lista o meno.
L'intento dell'espressione Count()!=0
d'altra parte non è ovvio per il lettore. Ovviamente non è difficile vedere che l'espressione ti dice se l'elenco è vuoto o no. Le domande sorgono perché la scrivi in questo modo particolare piuttosto che utilizzare il metodo standard. Perché usi Count()
esplicitamente? Se hai davvero bisogno di sapere se ci sono elementi in un elenco, perché vuoi prima contare l'intero elenco? Appena raggiungi 1 hai già la tua risposta. Se la sorgente era un iteratore su una grande (forse infinita) collezione o è stata tradotta in sql, potrebbe fare una grande differenza in termini di prestazioni. Quindi forse l'uso esplicito di Count () è di forzare una query differita da eseguire o attraversare un iteratore?
Ma la fonte è in realtà un List<T>
dove Count()
è O (1) e non ha effetti collaterali. Ma se il codice si basa su questa proprietà di List<T>
, allora perché non usare la Count
-property che indica più chiaramente che ti aspetti un'operazione O (1) senza effetti collaterali?
Come è scritto, list.Count()!=0
fa esattamente lo stesso di list.Any()
eccetto che è inutilmente più complesso e l'intento non è chiaro.