Was ist der "beste" Weg (unter Berücksichtigung von Geschwindigkeit und Lesbarkeit), um festzustellen, ob eine Liste leer ist? Auch wenn die Liste vom Typ ist IEnumerable<T>
und keine Count-Eigenschaft hat.
Im Moment werfe ich dazwischen:
if (myList.Count() == 0) { ... }
und das:
if (!myList.Any()) { ... }
Ich vermute, dass die zweite Option schneller ist, da sie ein Ergebnis liefert, sobald das erste Element angezeigt wird, während die zweite Option (für eine IEnumerable) jedes Element besuchen muss, um die Anzahl zurückzugeben.
Abgesehen davon, erscheint Ihnen die zweite Option als lesbar? Was würdest du bevorzugen? Oder können Sie sich einen besseren Weg vorstellen, um eine leere Liste zu testen?
Die Antwort von Edit @ lassevk scheint die logischste zu sein, verbunden mit ein wenig Laufzeitprüfung, um wenn möglich eine zwischengespeicherte Anzahl zu verwenden, wie folgt:
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()
gleichbedeutend mit list.IsEmpty
? Die Framework-Methode sollte optimiert werden - es lohnt sich nur, eine neue zu schreiben, wenn Sie herausgefunden haben, dass es sich um einen Perf-Engpass handelt.
IsEmpty
Erweiterungsmethode hinzufügt . github.com/dotnet/corefx/issues/35054 Bitte überprüfen und stimmen Sie ab, wenn Sie möchten und zustimmen.
is
undcast
sondern verwendenas
undnull
prüfen:ICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;