这两段代码有什么区别?

S.C*_*S.C 2 c#

int[] div = new int[] {2,3,5};
IEnumerable<int> seq = new int[] {10,15,20,25,30};
int x;
for (int i=0; i<div.Length; i++){
  x = div[i];
  seq = seq.Where( s=> s%x ==0);
}
seq = seq.ToList();
Run Code Online (Sandbox Code Playgroud)

int[] div = new int[] {2,3,5};
IEnumerable<int> seq = new int[] {10,15,20,25,30};
for (int i=0; i<div.Length; i++){
  int y = div[i];
  seq = seq.Where( s=> s%y ==0);
}
seq = seq.ToList();
Run Code Online (Sandbox Code Playgroud)

第一个seq的最终值是10,15,20,25,30,第二个是30.我对int x; 和 之间的区别有点困惑int y = div[i];.谁可以给我解释一下这个?
谢谢!

Kęd*_*rzu 5

调用seq = seq.Where( s=> s%x ==0);不会迭代元素.它只创建一个IEnumarable封装迭代,可以在fututre中迭代.

因此,如果x在循环之前声明变量,则传入的lambda将Where()使用相同的变量.由于您在循环中更改其值,因此最终只会实际使用最后一个.

而不是表达如下:

seq.Where( s=> s % 2 == 0).Where( s=> s % 3 == 0).Where( s=> s % 5 == 0);
Run Code Online (Sandbox Code Playgroud)

你得到:

seq.Where( s=> s % 5 == 0).Where( s=> s % 5 == 0).Where( s=> s % 5 == 0);
Run Code Online (Sandbox Code Playgroud)