2012-01-20 6 views
1

これら2つの方法のパフォーマンスに違いはありますか?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)); 
関連する問題