【问题标题】:Why do I use lambda expressions instead of functions? [closed]为什么我使用 lambda 表达式而不是函数? [关闭]
【发布时间】:2019-07-09 16:54:58
【问题描述】:

我有一个非常简单的问题。

我想尝试异步编程,但由于无法理解 lambda 表达式,所以我决定从那里开始。

你为什么要使用例如这个:

bool IsLonger(int x, string y) => y.Length > x;

关于这个:

private bool IsLonger(int x, string y)
{
    return y.Length > x ? true:false;
}

如果您不能使用:

/// <summary>
/// Return positive if inteager is higher number than string length
/// </summary>
/// <param name="x">X is our inteager</param>
/// <param name="y">Y is our string</param>
/// <returns></returns>

使用 lambda 表达式。
所以团队合作没多大用处?

我想发表一些意见,也许我的方法不对。
谢谢!

【问题讨论】:

  • 这实际上不是一个“lambda 表达式”——它是一个 "expression-bodied member",但答案是“简洁”——它们是相同的,但许多人发现简洁的版本更方便琐碎方法/属性;就个人而言,我喜欢它允许我一次看到更多这样的成员 - 它减少了必须滚动才能看到更多成员的认知负担
  • 为什么您认为在第一个场景中您不能在函数顶部添加评论?
  • @MarcGravell 表达式体法。
  • 这是一种表达式体方法,是表达式体成员更一般特征的一个例子:)
  • 旁注:如果你发现自己在写 ? true : false - 停止,删除 14 个字符,然后继续 :)(除非有自定义的 true() 运算符重载,等等等等)

标签: c# lambda c#-6.0


【解决方案1】:

首先我想更正一下:

使用 lambda 表达式代替函数

正如丹尼尔在他的回答中指出的那样,您在示例中显示的只是an expression bodied member

在方法上使用表达式不是标准,而是更多 C# 语言支持的功能,因此您可以自行决定何时使用它,何时不使用。

对于适合监视器的简短方法主体,我总是使用表达式主体成员而不是方法,但这是基于主要意见的答案。

其次,对于return y.Length &gt; x ? true:false; 部分,我将通过一个示例对其进行扩展。如果您将y.Length &gt; x 的值保存到变量中,它将如下所示:

bool condition = y.Length > x;

然后返回看起来像这样:

return condition ? true : false;

现在你会看到直接返回条件更直观。

return condition;

【讨论】:

    【解决方案2】:

    这不是 lambda。那是一个表达式主体的方法/成员。它只是另一个的简写。

    【讨论】:

    • “Lambdas 创建隐藏类并在堆栈上分配” - 实际上都不是必须的,注意 - 这取决于它会发生什么
    • “Lambdas 创建隐藏类并在堆栈上分配”是一个非常可疑的说法。我不完全确定这里的意图是什么,但我怀疑这是一个有用的句子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2016-11-30
    相关资源
    最近更新 更多