4

次のコードで ReSharper の警告「IEnumerable の複数の列挙が可能です」が表示されます。

public void Mymethod(IEnumerable<int> entities)
{
   var enumerator = entities.GetEnumerator();
   var entityType = entities.GetType();
}

説明されている多くのスタックオーバーフロー トピック (およびhttp://confluence.jetbrains.net/display/ReSharper/Possible+multiple+enumeration+of+IEnumerable ) と同様に、ReSharper はクエリが 2 回実行されることを認識します。

私の質問は、「GetType()」ステートメントがクエリとして認識される理由です。

なにか提案を?

前もって感謝します。

4

2 に答える 2

3

Resharper が十分にスマートでないだけです。GetTypeは仮想メソッドではないため、. に影響を与えることはできませんIEnumerable

于 2012-01-17T08:33:39.883 に答える
0

GetTypes呼び出すにentitiesは、ReSharper の観点から評価する必要があります (GetTypes列挙の評価が必要かどうかは不明です。そのため、「可能な複数の列挙」と表示されます)。ReSharper は、同じシナリオを持つメソッド内にいくつかの場所があることを確認するため、この警告を発行します。

entitiesこれは、何を表し、どの操作を実行するかによって、問題になる場合とそうでない場合があります。メモリ内配列を表している場合、またはリストを反復処理しない操作を実行している場合は、あまり心配する必要はありません。それを反復処理し、それがデータベースへのクエリを表している場合は、( ToListorを呼び出してToArray) 明示的に列挙し、代わりにその結果に基づいて処理することをお勧めします。

于 2012-01-17T08:28:47.190 に答える