【问题标题】:Using the C# Lambda Operator in a method signature在方法签名中使用 C# Lambda 运算符
【发布时间】:2021-08-08 22:56:08
【问题描述】:

我在 C# 文档 (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/lambda-operator#code-try-0) 中阅读了有关如何在 c# 签名或构造函数中使用 lambda 运算符的信息。还是没有开悟。有人可以解释一下这个方法签名中发生了什么:

public SampleCustomer(string name, DateTime dateJoined)
    => (Name, DateJoined) = (name, dateJoined);

【问题讨论】:

标签: c# lambda operator-keyword


【解决方案1】:

这是使用=> 语法编写的构造函数示例。 =>{ ... } 中的写法类似。这里发生了什么:

public SampleCustomer(string name, DateTime dateJoined) => (Name, DateJoined) = (name, dateJoined);

等于:

public SampleCustomer(string name, DateTime dateJoined)
{
    (Name, DateJoined) = (name, dateJoined);
}

删除元组后的样子:

public SampleCustomer(string name, DateTime dateJoined)
{
    Name = name;
    DateJoined = dateJoined;
}

所以在这个构造函数中,一些字段是根据传递给它的值分配的。

【讨论】:

  • 感谢您的完美回答,但您所说的 => 是 C# 中的一个术语,还是许多其他语言中的一个术语(一个通用术语)?
  • 在不同的语言中=> 可以以不同的方式工作。在 C# 和 JS 中是 lambda,在 C++ IIRC 中是另一回事
  • 只是C#中编写方法的语法糖
【解决方案2】:

这是一种编写方法的方法,在您的情况下是构造方法。

您的类具有(或继承)这两个属性 NameDateJoined 您的构造函数正在接收它们的值(使用元组)以初始化这些属性。

这是做同样的事情,但你的例子更短。

public SampleCustomer(string name, DateTime dateJoined)
{
    Name = name;
    DateJoined = dateJoined;
}

=> 运算符允许您省略 {}

【讨论】:

  • 只是在这里咆哮:令人难以置信的是,在文档中,他们设法这样解释了这种现象:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
  • @netfed 我不知道你认为它是惊人的还是可怕的。我什至无法弄清楚你认为什么是惊人的/可怕的。编码到编译器中并遵循一组严格的记录规则的东西真的可以称为“现象”吗?
  • 科学描述和解释的具有科学意义的事实或事件。让我们不要在这里进行哲学辩论。无论如何,这个问题得到了彻底的回答。
猜你喜欢
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 2012-09-24
  • 2011-12-29
相关资源
最近更新 更多