2012-01-20 44 views
1

這兩種方法之間是否存在任何性能差異?關於LINQ Any()方法的效率

// 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到集合中的所有對象,然後在任何()方法檢查。這通常比第一次比賽後迭代停止的第一種情況效率更低。

回答

7

不,性能應該是等效的 - Any()將在第一次匹配後停止對枚舉的迭代。

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

你也可以使用方法語法做到這一點更簡潔(和更容易閱讀和理解,但是這是見仁見智的問題)