确定列表是否为空的“最佳”方式(兼顾速度和可读性)是什么?即使列表是类型IEnumerable<T>
并且没有Count属性。
现在,我在这之间折腾:
if (myList.Count() == 0) { ... }
还有这个:
if (!myList.Any()) { ... }
我的猜测是第二个选项更快,因为它会在看到第一个项目后立即返回结果,而第二个选项(对于IEnumerable)将需要访问每个项目以返回计数。
话虽这么说,第二种选择对您来说可读吗?你更喜欢哪个?还是您可以想到一种更好的方法来测试空列表?
Edit @lassevk的响应似乎是最合乎逻辑的,再加上一些运行时检查,以便在可能的情况下使用缓存的计数,如下所示:
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
return !list.Any();
}
list.Any()
等于list.IsEmpty
吗?应该优化框架方法-仅当您发现这是一个性能瓶颈时才值得编写一个新方法。
IsEmpty
扩展方法的.NET Core类库建议发行。 github.com/dotnet/corefx/issues/35054 如果您愿意并同意,请检查并投票。
is
,cast
而是使用as
并null
检查:ICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;