1
Enumerable.Range(1, 999).Select((n,i) =>{ return n*i;})

“我”每次都进入什么?

Enumerable.Range(1, 999).Select((n,i,j) =>{ return n*i*j;})

为什么我不能添加“j”?

4

4 回答 4

1

IEnumerable 上的 Select() 扩展方法的第一个参数有两种形式。一个接受一个参数(枚举的当前元素)和第二个两个参数(当前元素和索引)。没有采用三个参数的版本。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb548891.aspx

于 2012-09-01T12:34:34.817 回答
1

接受带有两个参数的 lambda的Select重载将从序列中获取第一个参数,第二个参数是元素的索引。

在您的示例i中将始终为n-1,因此第二个参数的使用不多。当使用非平凡序列或非数字类型的序列时,在选择表达式中使用元素的顺序号有时可能是一个优势。

没有三参数版本。这就是为什么(n,i,j)不起作用。

于 2012-09-01T12:35:52.497 回答
1

i 是您用于当前投影的元素的索引的名称。您不能指定第三个参数,因为 Select 没有重载,它定义了一个接受三个参数的委托。

于 2012-09-01T12:36:05.917 回答
1

您可以基于 value ( Select(n)) 或基于 value 和 index ( Select(n, i)) 构建新元素。Select()没有定义三个参数。

比较:http: //msdn.microsoft.com/en-us/library/system.linq.enumerable.select

于 2012-09-01T12:36:07.340 回答