我爱string.IsNullOrEmpty
方法.我很想拥有能够为IEnumerable提供相同功能的东西.有这样的吗?也许一些收集助手班?我问的原因是,在if
语句中,如果模式是代码,代码看起来很混乱(mylist != null && mylist.Any())
.拥有它会更加清洁Foo.IsAny(myList)
.
这篇文章没有给出答案:IEnumerable是空的?.
什么是"最佳"(考虑到速度和可读性)的方式来确定列表是否为空?即使列表是类型IEnumerable<T>
且没有Count属性.
现在我在这之间折腾:
if (myList.Count() == 0) { ... }
Run Code Online (Sandbox Code Playgroud)
还有这个:
if (!myList.Any()) { ... }
Run Code Online (Sandbox Code Playgroud)
我的猜测是第二个选项更快,因为它会在看到第一个项目后立即返回结果,而第二个选项(对于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();
}
Run Code Online (Sandbox Code Playgroud)