Linq查询foreach

Moh*_*med 4 c# linq

我想清楚我对LINQ的疑问.我的代码如下:

val collection = this.Employees.Where(emp => emp.IsActive)
foreach (var emp in collection)
 {
   // some stuff
 }
Run Code Online (Sandbox Code Playgroud)

现在,如果我写这样的代码:

foreach (var emp in this.Employees.Where(emp => emp.IsActive))
 {
   // some stuff
 }
Run Code Online (Sandbox Code Playgroud)

this.Employees.Where(emp => emp.IsActive)在每次迭代时执行还是只执行一次?

ang*_*son 7

你可以这样想foreach:

foreach (var x in y)
    // ...
Run Code Online (Sandbox Code Playgroud)

如下:

T x;
using (var enumerator = y.GetEnumerator())
{
    while (enumerator.MoveNext())
    {
        x = enumerator.Current;
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你展示的两段代码会产生同样的效果.

for但不同的是:

for (int index = 0; index < s.Length; index++)
Run Code Online (Sandbox Code Playgroud)

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


Eri*_*oom 6

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