Qual è il modo "migliore" (tenendo conto sia della velocità che della leggibilità) per determinare se un elenco è vuoto? Anche se l'elenco è di tipo IEnumerable<T>
e non ha una proprietà Count.
In questo momento sto vomitando tra questo:
if (myList.Count() == 0) { ... }
e questo:
if (!myList.Any()) { ... }
La mia ipotesi è che la seconda opzione sia più veloce, poiché tornerà con un risultato non appena vedrà il primo elemento, mentre la seconda opzione (per un IEnumerable) dovrà visitare ogni elemento per restituire il conteggio.
Detto questo, la seconda opzione ti sembra leggibile? Quale preferiresti? O puoi pensare a un modo migliore per testare un elenco vuoto?
La risposta di Edit @ lassevk sembra essere la più logica, unita a un po 'di controllo del runtime per utilizzare un conteggio memorizzato nella cache se possibile, come questo:
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
return !list.Any();
}
list.Any()
equivalente a list.IsEmpty
? Il metodo del framework dovrebbe essere ottimizzato: vale la pena scriverne uno nuovo solo se hai capito che è un collo di bottiglia delle prestazioni.
IsEmpty
metodo di estensione. github.com/dotnet/corefx/issues/35054 Per favore controlla e votalo se vuoi e sei d'accordo.
is
ecast
ma usareas
enull
controllare:ICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;