我想澄清对LINQ的怀疑。 我的代码如下:
val collection = this.Employees.Where(emp => emp.IsActive)
foreach (var emp in collection)
{
// some stuff
}
现在,如果我写这样的代码:
foreach (var emp in this.Employees.Where(emp => emp.IsActive))
{
// some stuff
}
每次迭代都会执行this.Employees.Where(emp => emp.IsActive)
还是只执行一次?
答案 0 :(得分:7)
您可以将foreach
视为:
foreach (var x in y)
// ...
这样:
T x;
using (var enumerator = y.GetEnumerator())
{
while (enumerator.MoveNext())
{
x = enumerator.Current;
// ...
}
}
所以你展示的两段代码会产生同样的效果。
但for
不同:
for (int index = 0; index < s.Length; index++)
这里将在循环的每次迭代中评估s.Length
。
答案 1 :(得分:6)
它只会被执行一次。对于运行时,两个语句具有完全相同的效果。
答案 2 :(得分:0)
它只会被执行一次......