LINQ的Any方法是否有效?

时间:2012-03-14 16:25:03

标签: linq

LINQ中的Any方法是否迭代整个集合,或者在第一次成功迭代发生时返回true?

3 个答案:

答案 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,但如果不存在,则它将遍历整个集合。