【问题标题】:How can I use lambdas with methods in C#?如何在 C# 中将 lambda 与方法一起使用?
【发布时间】: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 会更好的原因是什么?

标签: c# 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 2013-09-03
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多