Enumerable.Range(1, 999).Select((n,i) =>{ return n*i;})
「i」は毎回何を入れますか?
Enumerable.Range(1, 999).Select((n,i,j) =>{ return n*i*j;})
なぜ「j」を追加できないのですか?
Enumerable.Range(1, 999).Select((n,i) =>{ return n*i;})
「i」は毎回何を入れますか?
Enumerable.Range(1, 999).Select((n,i,j) =>{ return n*i*j;})
なぜ「j」を追加できないのですか?
IEnumerableのSelect()拡張メソッドの最初の引数には、2つの形式があります。1つは1つの引数(列挙の現在の要素)を取り、次の2つの引数(現在の要素とインデックス)を取ります。3つの引数を取るバージョンはありません。詳細については、 http://msdn.microsoft.com/en-us/library/bb548891.aspxを参照してください。
2つのSelect
パラメーターを持つラムダを受け入れるオーバーロードは、シーケンスから最初のパラメーターを取得し、2番目は要素のインデックスです。
あなたの例i
では常にでn-1
あるため、2番目のパラメーターはあまり使用されません。自明でないシーケンスまたは数値以外のタイプのシーケンスを操作する場合、select式で要素の順序番号を使用できると便利な場合があります。
3つのパラメータバージョンはありません。(n,i,j)
それが機能しない理由です。
iは、現在投影している要素のインデックスに使用した名前です。3つのパラメーターを受け取るデリゲートを定義するSelectのオーバーロードがないため、3番目のパラメーターを指定することはできません。
Select(n)
値( )に基づいて、または値とインデックス( )に基づいて新しい要素を作成できますSelect(n, i)
。Select()
3つのパラメータで定義されていません。
比較: http: //msdn.microsoft.com/en-us/library/system.linq.enumerable.select