Jaki jest „najlepszy” (biorąc pod uwagę zarówno szybkość, jak i czytelność) sposób określenia, czy lista jest pusta? Nawet jeśli lista jest typu IEnumerable<T>
i nie ma właściwości Count.
W tej chwili rzucam się między to:
if (myList.Count() == 0) { ... }
i to:
if (!myList.Any()) { ... }
Domyślam się, że druga opcja jest szybsza, ponieważ wróci z wynikiem, gdy tylko zobaczy pierwszy element, podczas gdy druga opcja (dla IEnumerable) będzie musiała odwiedzić każdy element, aby zwrócić liczbę.
Biorąc to pod uwagę, czy druga opcja wygląda na tak czytelną? Które wolisz? A może możesz wymyślić lepszy sposób na przetestowanie pustej listy?
Odpowiedź Edit @ lassevk wydaje się najbardziej logiczna, w połączeniu z odrobiną sprawdzenia w czasie wykonywania, aby użyć liczby z pamięci podręcznej, jeśli to możliwe, na przykład:
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()
równoważne list.IsEmpty
? Metoda frameworka powinna zostać zoptymalizowana - warto napisać nową tylko wtedy, gdy zorientowałeś się, że jest to wąskie gardło perf.
IsEmpty
metodę rozszerzenia. github.com/dotnet/corefx/issues/35054 Sprawdź i zagłosuj, jeśli chcesz i zgadzasz się.
is
, acast
jednak stosowanieas
inull
sprawdzić:ICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;