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];.谁可以给我解释一下这个?
谢谢!
调用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)