我有以下代码:
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
最佳答案
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
方法中内联声明,而不用先声明action。此外,作为了解委托(delegate)和 lambda 的练习,这很好,但在实践中,我建议:
int[] iArray = new int[] { 2, 3, 4 };
foreach (var val in iArray)
Console.WriteLine("{0:d} squared = {1:d}", val, val * val));
或者,如果最后一行将在别处重复使用,则将其拆分回 ShowSquares
方法。
关于C# 将 Action<int> 转换为 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12378434/