1

次のコードがあります。

int[] iArray = new int[] { 2, 3, 4 };
Action<int> action = new Action<int>(ShowSquares);
Array.ForEach(iArray, action);

private static void ShowSquares(int val)
{
    Console.WriteLine("{0:d} squared = {1:d}", val, val * val);
}

このコードは機能しますが、2行目を変換したい

Action<int> action = new Action<int>(ShowSquares);

ラムダ式を使用します。

これは可能ですか?

ティア

4

3 に答える 3

3
int[] iArray = new int[] { 2, 3, 4 };
Array.ForEach(iArray, val => Console.WriteLine("{0:d} squared = {1:d}", val, val * val));

生成されるラムダは、メソッドと同じになりますShowSquares。後で使用する必要がない限り、最初にアクションを宣言する代わりにaction、メソッドでインラインで宣言できます。ForEachまた、デリゲートとラムダについて学ぶための演習として、これは良いことですが、実際には、次のことをお勧めします。

int[] iArray = new int[] { 2, 3, 4 };
foreach (var val in iArray)
    Console.WriteLine("{0:d} squared = {1:d}", val, val * val));

または、最終行を他の場所で再利用する場合は、ShowSquaresメソッドに分割し直します。

于 2012-09-11T21:57:25.173 に答える
3
Action<int> action = (a) => ShowSquares(a); 
于 2012-09-11T22:00:07.860 に答える
3
Array.ForEach(iArray, i=>ShowSquares(i));
于 2012-09-11T22:01:57.843 に答える