Какой "лучший" (принимая во внимание скорость и удобочитаемость) способ определить, пуст ли список? Даже если список относится к типу IEnumerable<T>
и не имеет свойства Count.
Прямо сейчас я бросаюсь между этим:
if (myList.Count() == 0) { ... }
и это:
if (!myList.Any()) { ... }
Я предполагаю, что второй вариант быстрее, так как он вернется с результатом, как только увидит первый элемент, тогда как второй вариант (для IEnumerable) должен будет посетить каждый элемент, чтобы вернуть счет.
При этом второй вариант кажется вам читаемым? Что бы вы предпочли? Или вы можете придумать лучший способ проверить пустой список?
Ответ Edit @ lassevk кажется наиболее логичным, в сочетании с небольшой проверкой времени выполнения, чтобы использовать кешированный счетчик, если это возможно, например:
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()
эквивалентно list.IsEmpty
? Следует оптимизировать метод фреймворка - писать новый стоит только в том случае, если вы поняли, что это узкое место в производительности.
IsEmpty
метод расширения. github.com/dotnet/corefx/issues/35054 Пожалуйста, проверьте и проголосуйте, если хотите и согласны.
is
иcast
но использованиеas
иnull
проверить:ICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;