如何在 C# 中将 lambda 与方法一起使用?

Posted

技术标签:

【中文标题】如何在 C# 中将 lambda 与方法一起使用?【英文标题】:How can I use lambdas with methods in C#? 【发布时间】:2018-06-05 21:24:12 【问题描述】:

我在 C# 中有一种方法,如下所示:

static Double Stirling(long n)

     return Math.Sqrt((2 * n + 1.0 / 3.0) * Math.PI) * Math.Pow(n, n) / Math.Exp(n);

我的问题是......可以使用类似的东西:

static Double Stirling(long n) => return Math.Sqrt((2 * n + 1.0 / 3.0) * Math.PI) * Math.Pow(n, n) / Math.Exp(n);

我想要更漂亮更简洁的东西,这就是我问的原因

【问题讨论】:

你试过了吗? 是的!是'return'关键字给了我一个错误 您认为使用 lambda 会更好的原因是什么? 【参考方案1】:

您可以使用表达式主体方法。

static double Stirling(long n) => Math.Sqrt((2 * n + 1.0 / 3.0) * Math.PI) * Math.Pow(n, n) / Math.Exp(n);

这只有在方法执行单个语句时才有可能,在这种情况下,我们去掉了return 语句。

或者您可以使用Func 委托来表示这样的行为:

Func<long, double> func = (long n) => Math.Sqrt((2 * n + 1.0 / 3.0) * Math.PI) * Math.Pow(n, n) / Math.Exp(n);

然后这样称呼它:

double result = func(2);

重要的是要注意=&gt; 运算符用于expression bodied methods(上面的第一个示例)和lambdas(上面的第二个示例),但它们是完全不同的野兽。

【讨论】:

【参考方案2】:

你可以用这个(只去掉return)

static Double Stirling(long n) => Math.Sqrt((2 * n + 1.0 / 3.0) * Math.PI) * Math.Pow(n, n) / Math.Exp(n);

但这是来自 C# 6 的表达式主体方法

见this

【讨论】:

以上是关于如何在 C# 中将 lambda 与方法一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中将 DLLImport 与结构一起用作参数?

如何在 C# 中将 HttpClient PostAsync() 与线程池一起使用?

如何在 Rails 3 中将范围与 Ransack 一起使用?

在 C# 中将 `is` 运算符与泛型一起使用

如何在 Kotlin 中将函数接收器类型与 SAM 接口一起使用

在 C# 中将 lambda 函数作为命名参数传递