Linq查询foreach

时间:2013-06-06 10:00:04

标签: c# linq

我想澄清对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)还是只执行一次?

3 个答案:

答案 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)

它只会被执行一次......