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);
}

虽然此代码有效,但我想转换第二行

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

使用 lambda 表达式。

这可能吗?

TIA

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));

生成的 lambda 将与您的ShowSquares方法相同。只要action以后不需要使用,可以在ForEach方法中内联声明,而不是先声明动作。此外,作为了解委托和 lambda 的练习,这很好,但在实践中,我建议:

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 回答