表达式体成员与 Lambda 表达式

Expression-bodied members vs Lambda expressions

A lambda expression is a block of code (an expression or a statement block) that is treated as an object. It can be passed as an argument to methods, and it can also be returned by method calls.

(input parameters) => expression
 SomeFunction(x => x * x);

看到这个声明,我想知道使用 lambdas 和使用 Expression-bodied 有什么区别?

public string Name => First + " " + Last;

表达式主体语法实际上只是属性和(命名)方法的较短语法,没有特殊含义。特别是,它与 lambda 表达式无关。

这两行完全等价:

public string Name => First + " " + Last;

public string Name { get { return First + " " + Last; } }

您还可以编写表达式主体方法(注意与执行相同操作的 lambda 表达式的区别。此处指定可选的访问修饰符、return 类型和名称):

public int Square (int x) => x * x;

而不是

public int Square (int x)
{
    return x * x;
}

你也可以用它来写getters和setters

private string _name;
public Name
{
    get => _name;
    set => _name = value;
}

对于构造函数(假设 class 命名为 Person):

public Person(string name) => _name = name;

使用元组语法,您甚至可以分配多个参数

public Person(string first, string last) => (_first, _last) = (first, last);

这也适用于分配给属性。

表达式主体方法是语法糖。而不是这样写:

public string GetName()
{
    return First + " " + Last;
}

你可以这样写:

public string GetName() => First + " " + Last;

调用第一个或第二个的结果将完全相同。

所有类型也是如此 expression body members.

另一方面,正式声明的 lambda 表达式 here 是:

an anonymous function that you can use to create delegates or expression tree types.

话虽这么说,但很明显,尽管语法相似,但有两个完全不同的东西。