如何在C#中使用lambdas方法?

时间:2017-12-23 18:07:28

标签: c# lambda

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

您可以使用此功能(只需删除返回)

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