Bir listenin boş olup olmadığını belirlemenin "en iyi" (hem hızı hem de okunabilirliği hesaba katarak) yolu nedir? Liste türü olsa IEnumerable<T>
ve Count özelliği olmasa bile.
Şu anda bunun arasında gidip geliyorum:
if (myList.Count() == 0) { ... }
ve bu:
if (!myList.Any()) { ... }
Tahminimce, ikinci seçenek daha hızlıdır, çünkü ilk öğeyi görür görmez bir sonuçla geri dönecektir, oysa ikinci seçeneğin (bir IEnumerable için) sayımı döndürmek için her öğeyi ziyaret etmesi gerekecektir.
Bununla birlikte, ikinci seçenek size okunabilir mi görünüyor? Hangisini tercih edersin? Veya boş bir listeyi test etmenin daha iyi bir yolunu düşünebilir misiniz?
Edit @ lassevk'in yanıtı en mantıklı gibi görünüyor, mümkünse önbelleğe alınmış bir sayımı kullanmak için biraz çalışma zamanı kontrolü ile birleştiğinde, şöyle:
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()
Eşdeğeri değil list.IsEmpty
mi? Çerçeve yöntemi optimize edilmelidir - ancak bunun mükemmel bir darboğaz olduğunu anladıysanız yeni bir tane yazmaya değer.
IsEmpty
Uzantı yöntemi ekleyen .NET Core sınıf kitaplığına sorun önerdim . github.com/dotnet/corefx/issues/35054 Lütfen beğenir ve kabul ederseniz kontrol edip oylayın.
is
,cast
kullanınas
venull
kontrol edin:ICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;