Какой самый быстрый способ проверить, IEnumerable Count больше нуля без циклического прохождения всех записей - PullRequest
4 голосов
/ 30 апреля 2011

я знаю, что все говорят, чтобы не делать что-то подобное, потому что это очень медленно (просто чтобы узнать, есть ли 0)

  IEnumerable<MyObject> list;
  if (list.Count() > 0)
  { 
  }

но что является лучшей альтернативой, когда все, что мне нужно сделать, это выяснить, есть ли в списке счетчик 0 или есть ли в нем элементы

Ответы [ 3 ]

11 голосов
/ 30 апреля 2011

Используйте list.Any(). Возвращает true, если находит элемент. Реализация мудрая, это будет:

using (var enumerator = list.GetEnumerator())
{
  return enumerator.MoveNext();
}
0 голосов
/ 21 апреля 2014

Также проверьте на ноль и считайте как if (!list.IsNullOrEmpty()) { ... }

/// <summary>
/// Returns true if collection is null or empty.
/// </summary>
public static bool IsNullOrEmpty<T>(this IEnumerable<T> source)
{
    return source == null || !source.Any();
}
0 голосов
/ 30 апреля 2011

Что-то вроде этого должно работать для вас:

public static IsEmpty(this IEnumerable list)
{
    IEnumerator en = list.GetEnumerator();
    return !en.MoveNext();
}

Просто начните перечислять, и если вы можете перейти к первому элементу, он не пустой. Кроме того, вы можете проверить, реализует ли IEnumerable ICollection, и, если это так, вызвать его свойство .Count.

...