Apa cara "terbaik" (dengan mempertimbangkan kecepatan dan keterbacaan) untuk menentukan apakah sebuah daftar kosong? Meskipun daftarnya berjenis IEnumerable<T>
dan tidak memiliki properti Hitungan.
Saat ini saya sedang memikirkan di antara ini:
if (myList.Count() == 0) { ... }
dan ini:
if (!myList.Any()) { ... }
Dugaan saya adalah bahwa opsi kedua lebih cepat, karena akan kembali dengan hasil segera setelah melihat item pertama, sedangkan opsi kedua (untuk IEnumerable) perlu mengunjungi setiap item untuk mengembalikan hitungan.
Karena itu, apakah opsi kedua terlihat dapat dibaca oleh Anda? Mana yang lebih kamu sukai? Atau dapatkah Anda memikirkan cara yang lebih baik untuk menguji daftar kosong?
Respons edit @ lassevk tampaknya yang paling logis, ditambah dengan sedikit pemeriksaan waktu proses untuk menggunakan jumlah cache jika memungkinkan, seperti ini:
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()
setara dengan list.IsEmpty
? Metode kerangka kerja harus dioptimalkan - ada baiknya menulis yang baru hanya jika Anda mengetahuinya sebagai penghambat kinerja.
IsEmpty
metode ekstensi. github.com/dotnet/corefx/issues/35054 Silakan centang dan pilih jika Anda suka dan setuju.
is
dancast
tapi gunakanas
dannull
periksa:ICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;