Что такое «лучший» (с учетом скорости и удобочитаемости), чтобы определить, пуст ли список? Даже если список имеет тип IEnumerable<T>
и не имеет свойства Count.Проверка наличия пустого списка с помощью LINQ
Сейчас я подбрасывая между этим:
if (myList.Count() == 0) { ... }
и это:
if (!myList.Any()) { ... }
Я думаю, что второй вариант является более быстрым, так как он вернется с результатом как только он увидит первый элемент, тогда как второй вариант (для IEnumerable) должен будет посетить каждый элемент, чтобы вернуть счет.
Это, как говорится, второй вариант выглядит как читабельный для вас? Что бы вы предпочли? Или вы можете придумать лучший способ проверить пустой список?
Редактировать @ ответ lassevk кажется наиболее логичным, в сочетании с небольшим количеством выполнения проверки, чтобы использовать кэшированные подсчет, если это возможно, как это:
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
return !list.Any();
}
Гораздо лучше не смешивать `is` и` cast`, а использовать `as` и` null` check: `ICollection collection = list as ICollection ; if (collection! = null) return colllection.Count; ` –
abatishchev
2010-08-26 15:22:09
Зачем писать дополнительный метод? Разве это не `list.Any()` эквивалентно `list.IsEmpty`? Рамочный метод должен быть оптимизирован - стоит написать новый, только если вы выяснили, что это узкое место. – dbkk 2011-06-18 17:43:51
Кто-нибудь потрудился измерить производительность по их предлагаемым реализациям или все просто выбрасывают идеи? – 2013-03-01 15:26:52