Lla*_*zar 2 c# lambda expression-body
lambda 表达式是被视为对象的代码块(表达式或语句块)。它可以作为参数传递给方法,也可以通过方法调用返回。
(input parameters) => expression
SomeFunction(x => x * x);
Run Code Online (Sandbox Code Playgroud)
看着这个语句,我想知道使用 lambdas 和使用 Expression-bodied 时有什么区别?
public string Name => First + " " + Last;
Run Code Online (Sandbox Code Playgroud)
表达式体语法实际上只是属性和(命名)方法的较短语法,没有特殊含义。特别是,它与 lambda 表达式无关。
这两行是完全等价的:
public string Name => First + " " + Last;
public string Name { get { return First + " " + Last; } }
Run Code Online (Sandbox Code Playgroud)
您还可以编写表达式主体的方法(注意与您的 lambda 表达式执行相同操作的区别。在这里您指定返回类型和名称):
public int Square (int x) => x * x;
Run Code Online (Sandbox Code Playgroud)
代替
public int Square (int x)
{
return x * x;
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用它来编写 getter 和 setter
private string _name;
public Name
{
get => _name;
set => _name = value;
}
Run Code Online (Sandbox Code Playgroud)
对于构造函数(假设一个名为 的类Person
):
public Person(string name) => _name = name;
Run Code Online (Sandbox Code Playgroud)
使用元组语法,您甚至可以分配多个参数
public Person(string first, string last) => (_first, _last) = (first, last);
Run Code Online (Sandbox Code Playgroud)
这也适用于分配给属性。
表达体方法是语法糖。而不是写这个:
public string GetName()
{
return First + " " + Last;
}
Run Code Online (Sandbox Code Playgroud)
你可以这样写:
public string GetName() => First + " " + Last;
Run Code Online (Sandbox Code Playgroud)
调用第一个或第二个的结果将完全相同。
各种表情体成员也是如此。
另一方面,这里正式声明的 lambda 表达式是:
可用于创建委托或表达式树类型的匿名函数。
话虽如此,很明显,尽管语法相似,但有两种完全不同的东西。