C# 将 Action<int> 转换为 lambda

标签 c# lambda

我有以下代码:

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/

相关文章:

c# - MVC5 使用来自其他命名空间的类的脚手架(引用的 DLL)

c# - C#中的连续字母

c++ - 传递带有捕获的 lambda 作为另一个 lambda 的参数,可能吗?

python - map() 中带有 if 条件的 Lambda

c# - 监控应用程序内存使用情况的正确方法是什么?

c# - 为什么编译器尝试但无法将 Devart.Data.Oracle.OracleCommand 转换为 System.IDisposable?

c# - 显式和隐式类型转换之间有什么区别?

java - java8流下载文件的有效方法

java - 如何使用 Java 8 Stream 将 csv 转换为 map

java - 从 Map Java 8 中的 Map 获取字符串