关于LINQ Any()方法的效率

时间:2012-01-20 02:59:13

标签: performance linq

这两种方法之间是否有任何性能差异?

// First approach, iterating until a match
public bool Find(IEnumerable<Object> allObjects, Object testObj)
{
  foreach (Object obj in allObjects)
  {  
    if (obj.Equals(testObj))
    { return true; }
  }
  return false;
}

// Second approach, using LINQ and Any()
public bool Find(IEnumerable<Object> allObjects, Object testObj)
{
  var query = from Object obj in allObjects where obj.Equals(testObj) select obj;
  return query.Any();  
}

我的问题是LINQ版本是否将testObj与集合中的所有对象进行比较,然后Any()方法检查生成的集合是否为空。这通常比第一次匹配后迭代停止的第一种情况效率低。

1 个答案:

答案 0 :(得分:7)

不,性能应该相同 - Any()将在第一次匹配后停止对源枚举进行迭代。

此外,您可以使用方法语法更简洁(更容易阅读和理解,但这是一个意见问题):

return allObjects.Any(obj => obj.Equals(testObj));