如何在 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);
重要的是要注意=>
运算符用于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 一起使用?