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