在最近的一次采访中,有人问我 .Any()
和 .Length > 0
之间的区别是什么,以及为什么我会在测试时使用其中一个来查看是否集合有元素。
这让我有点震惊,因为它看起来有点明显,但我觉得我可能遗漏了什么。
我建议您在只需要知道集合包含元素时使用 .Length
,在希望过滤结果时使用 .Any()
。
大概 .Any()
也会受到性能影响,因为它必须在内部执行循环/查询。
最佳答案
Length
仅存在于某些集合类型中,例如 Array
.
Any
是一种扩展方法,可用于任何实现 IEnumerable<T>
的集合.
如果Length
存在则可以使用它,否则使用 Any
.
Presumably .Any() takes a performance hit too as it has to do a loop / query internally.
Enumerable.Any
不循环。它获取一个迭代器并检查是否 MoveNext
返回真。这是来自 .NET Reflector 的源代码.
public static bool Any<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
if (enumerator.MoveNext())
{
return true;
}
}
return false;
}
关于c# - 面试题: . Any() vs if (.Length > 0) 测试集合是否有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2989300/