Was ist die "beste" (unter Berücksichtigung von Geschwindigkeit und Lesbarkeit), um festzustellen, ob eine Liste leer ist? Auch wenn die Liste vom Typ IEnumerable<T>
ist und keine Count-Eigenschaft hat.Überprüfen, ob eine Liste mit LINQ leer ist
Im Moment bin ich warf zwischen auf den Punkt:
if (myList.Count() == 0) { ... }
und dieses:
if (!myList.Any()) { ... }
Meine Vermutung ist, dass die zweite Option ist schneller, da es mit einem Ergebnis zurückkommen werde sobald es das erste Element sieht, während die zweite Option (für ein IEnumerable) jedes Element besuchen muss, um die Anzahl zurückzugeben.
Das gesagt, sieht die zweite Option für Sie lesbar aus? Was würdest du bevorzugen? Oder können Sie sich einen besseren Weg vorstellen, um nach einer leeren Liste zu suchen?
bearbeiten @ Antwort lassevk das scheint die logischste zu sein, gepaart mit ein bisschen Laufzeit eine im Cache gespeicherte Zählung, wenn möglich, wie diese zu verwenden Überprüfung:
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
return !list.Any();
}
Viel besser nicht mischen 'is' und' cast' aber verwenden 'as' und' null' check: 'ICollection collection = Liste als ICollection ; if (collection! = null) return colllection.Count; ' –
abatishchev
Warum eine zusätzliche Methode schreiben? Ist nicht 'list.Any()' äquivalent zu 'list.IsEmpty'? Die Framework-Methode sollte optimiert werden - es lohnt sich, nur dann eine neue zu schreiben, wenn Sie herausgefunden haben, dass dies ein perfekter Flaschenhals ist. – dbkk
Hat sich jemand Mühe gegeben, die Leistung seiner vorgeschlagenen Implementierungen zu messen, oder werfen alle nur Ideen aus? –