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