【发布时间】:2015-07-16 15:05:09
【问题描述】:
所以我想知道的是,在我的foreach 循环中使用LINQ where 子句是否意味着在每次迭代时它都会重新评估我的LINQ where 子句。例如:
var MyId = 1;
foreach (var thing in ListOfThings.Where(x => x.ID == MyId))
{
//do Something
}
还是写得更好:
var MyId = 1;
var myList = ListOfThings.Where(x => x.ID == MyId);
foreach (var thing in myList)
{
//do Something
}
或者它们的工作方式完全相同?
【问题讨论】:
-
最后一个问题:是的
-
同样的 :-) 任何方式
Where返回迭代器,所以只执行一次 -
拿个IL反汇编器,反汇编两个代码,看看有没有区别
-
@IssaJaber 两者的 IL 永远不会相同......他的问题是它们是否执行相同的功能......他们所做的。
-
@DavidG 好主意,虽然我必须补充一点,
TestFunc将为列表中的每个项目执行,因此真正的测试是TestFunc执行的次数与List.Count相同