这两种方法之间有任何性能差异吗?
// 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()方法检查生成的集合是否为空.这通常比第一次匹配后迭代停止的第一种情况效率低.
不,性能应该是等效的 - Any()在第一次匹配后将停止对源枚举进行迭代.
您也可以使用方法语法更简洁(更容易阅读和理解,但这是一个意见问题):
return allObjects.Any(obj => obj.Equals(testObj));
Run Code Online (Sandbox Code Playgroud)