Enumerable.Range(1, 999).Select((n,i) =>{ return n*i;})
“我”每次都进入什么?
Enumerable.Range(1, 999).Select((n,i,j) =>{ return n*i*j;})
为什么我不能添加“j”?
Enumerable.Range(1, 999).Select((n,i) =>{ return n*i;})
“我”每次都进入什么?
Enumerable.Range(1, 999).Select((n,i,j) =>{ return n*i*j;})
为什么我不能添加“j”?
IEnumerable 上的 Select() 扩展方法的第一个参数有两种形式。一个接受一个参数(枚举的当前元素)和第二个两个参数(当前元素和索引)。没有采用三个参数的版本。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb548891.aspx。
接受带有两个参数的 lambda的Select
重载将从序列中获取第一个参数,第二个参数是元素的索引。
在您的示例i
中将始终为n-1
,因此第二个参数的使用不多。当使用非平凡序列或非数字类型的序列时,在选择表达式中使用元素的顺序号有时可能是一个优势。
没有三参数版本。这就是为什么(n,i,j)
不起作用。
i 是您用于当前投影的元素的索引的名称。您不能指定第三个参数,因为 Select 没有重载,它定义了一个接受三个参数的委托。
您可以基于 value ( Select(n)
) 或基于 value 和 index ( Select(n, i)
) 构建新元素。Select()
没有定义三个参数。
比较:http: //msdn.microsoft.com/en-us/library/system.linq.enumerable.select