我负责的代码有一个常见模式,如下所示,一个嵌套循环,其中包含一个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语句的代码?