4

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

4

3 回答 3

7

你可以这样想foreach

foreach (var x in y)
    // ...

像这样:

T x;
using (var enumerator = y.GetEnumerator())
{
    while (enumerator.MoveNext())
    {
        x = enumerator.Current;
        // ...
    }
}

所以你展示的两段代码将具有相同的效果。

然而Afor不同:

for (int index = 0; index < s.Length; index++)

这里s.Length将在循环的每次迭代中进行评估。

于 2013-06-06T10:04:01.697 回答
6

它只会执行一次。对于运行时,这两个语句具有完全相同的效果。

于 2013-06-06T10:01:16.370 回答
0

它只会执行一次...

于 2013-06-06T10:04:06.630 回答