关于LINQ Any()方法的效率

Chu*_*ckH 1 linq performance

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

// 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();  
}
Run Code Online (Sandbox Code Playgroud)

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

Bro*_*ass 7

不,性能应该是等效的 - Any()在第一次匹配后将停止对源枚举进行迭代.

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

return allObjects.Any(obj => obj.Equals(testObj));
Run Code Online (Sandbox Code Playgroud)