Метод возвращает последовательность, IEnumerable<T>
, и теперь вы хотите проверить, является ли она пустой. Как вы рекомендуете это делать? Я ищу как хорошую читабельность, так и хорошую производительность.
Первый и самый очевидный способ - проверить, что число больше нуля:
if(sequence.Count() == 0)
Имеет приличную читаемость, но ужасную производительность, так как фактически должен пройти всю последовательность.
Метод, который я иногда использую, следующий:
if(!sequence.Any())
Это (насколько я знаю) не должно проходить всю последовательность, но читаемость немного неловкая и неловкая. (Читается намного лучше, если мы проверяем, что последовательность не пуста, хотя).
Другой вариант - использовать First
в режиме try-catch, например:
try
{
sequence.First();
}
catch(InvalidOperationException)
{
// Do something
}
Не очень красивое решение и, возможно, более медленное, поскольку оно использует исключения и прочее. Можно предотвратить это, используя, конечно, FirstOrDefault
, за исключением того, что у вас будет большая проблема, если первый элемент в последовательности будет значением по умолчанию;)
Итак, есть ли другие способы проверить, является ли последовательность пустой? Какой из них вы обычно используете? Какой из них вы рекомендуете использовать?
Примечание: Для оптимальной читабельности я бы, вероятно, поместил один из приведенных выше фрагментов в метод расширения IsEmpty
, но мне все равно любопытно, поскольку мне пришлось бы что-то делать внутри этого метода, как скважина: p