LINQ中的Any
方法是否迭代整个集合,或者在第一次成功迭代发生时返回true?
答案 0 :(得分:6)
Any
方法只会迭代必需的最少元素数。一旦找到匹配的元素,它就会立即返回
大致实现如下
public static bool Any<T>(this IEnumerable<T> enumerable, Func<T, bool> predicate) {
foreach (var cur in enumerable) {
if (predicate(cur)) {
return true;
}
}
return false;
}
在最坏的情况下(无或最后匹配),它将访问所有元素。在最好的情况下(第一次匹配),它只会访问1
答案 1 :(得分:2)
后者 - 您可以使用ReSharper查看代码,以验证您是否下载了试用版。
关于Any是否有效 - 它不是例如可以选择Count属性作为替代。但它确实可以很好地表达意图。
答案 2 :(得分:1)
一旦找到与谓词的成功匹配,任何返回都为true,但如果不存在,则它将遍历整个集合。