在不遍历所有记录的情况下,检查IEnumerable Count是否大于零的最快方法是什么?



我知道每个人都说要避免这样做,因为它非常慢(只是为了找出是否有0)

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

但是当我需要做的只是找出列表的计数是否为0或者其中是否有项目

时,最好的替代方法是什么呢?

使用list.Any()。如果找到元素,则返回true。在实现方面,它应该是:

using (var enumerator = list.GetEnumerator())
{
  return enumerator.MoveNext();
}

像这样的东西应该为您工作:

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

开始枚举,如果你能移动到第一项,它就不是空的。此外,您还可以检查IEnumerable是否也实现了ICollection,如果是,则调用它的. count属性。

同时检查是否为null并计数为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();
}

相关内容

最新更新