私が管理しているコードには、次のような一般的なパターンがあります。特定の要素を見つけるための if を含むネストされたループです。
foreach (Storage storage in mStorage.Values)
foreach (OrderStorage oStorage in storage.OrderStorage)
if (oStorage.OrderStorageId == orderStorageId)
これをLINQに変更することを考えていました:
foreach (OrderStorage oStorage in (from storage in mStorage.Values
from oStorage in storage.OrderStorage
where oStorage.OrderStorageId == orderStorageId
select oStorage))
しかし、ここで何が起こっているのかがわかりにくく、メモリと CPU の両方のパフォーマンスを犠牲にして、より多くのオブジェクトが作成される可能性があるため、それほど魅力的ではないようです。実際にはさらに多くのオブジェクトが作成されるのでしょうか、それとも C# コンパイラが if を内部に持つ入れ子になったループに似たコードを出力するのでしょうか?