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

「i」は毎回何を入れますか?

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

なぜ「j」を追加できないのですか?

4

4 に答える 4

1

IEnumerableのSelect()拡張メソッドの最初の引数には、2つの形式があります。1つは1つの引数(列挙の現在の要素)を取り、次の2つの引数(現在の要素とインデックス)を取ります。3つの引数を取るバージョンはありません。詳細については、 http://msdn.microsoft.com/en-us/library/bb548891.aspxを参照してください。

于 2012-09-01T12:34:34.817 に答える
1

2つのSelectパラメーターを持つラムダを受け入れるオーバーロードは、シーケンスから最初のパラメーターを取得し、2番目は要素のインデックスです。

あなたの例iでは常にでn-1あるため、2番目のパラメーターはあまり使用されません。自明でないシーケンスまたは数値以外のタイプのシーケンスを操作する場合、select式で要素の順序番号を使用できると便利な場合があります。

3つのパラメータバージョンはありません。(n,i,j)それが機能しない理由です。

于 2012-09-01T12:35:52.497 に答える
1

iは、現在投影している要素のインデックスに使用した名前です。3つのパラメーターを受け取るデリゲートを定義するSelectのオーバーロードがないため、3番目のパラメーターを指定することはできません。

于 2012-09-01T12:36:05.917 に答える
1

Select(n)値( )に基づいて、または値とインデックス( )に基づいて新しい要素を作成できますSelect(n, i)Select()3つのパラメータで定義されていません。

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

于 2012-09-01T12:36:07.340 に答える