lambda表达式是被视为对象的代码块(表达式或语句块)。它可以作为参数传递给方法,也可以由方法调用返回。
(input parameters) => expression
SomeFunction(x => x * x);
看着这句话,我想知道使用lambda和使用Expression-bodied有什么区别?
public string Name => First + " " + Last;
答案 0 :(得分:3)
表达式主体语法实际上只是属性和(命名)方法的较短语法,没有特殊含义。
这两行完全等效:
public string Name => First + " " + Last;
public string Name { get { return First + " " + Last; } }
您还可以编写表达式绑定的方法(请注意与lambda表达式相同的区别。在这里,您指定返回类型和名称):
public int Square (int x) => x * x;
代替
public int Square (int x)
{
return x * x;
}
您还可以使用它来编写getter和setters
private string _name;
public Name
{
get => _name;
set => _name = value;
}
以及对于构造函数(假设名为Person
的类):
public Person(string name) => _name = name;
使用元组语法,甚至可以分配多个参数
public Person(string first, string last) => (_first, _last) = (first, last);
这也适用于分配属性。
答案 1 :(得分:1)
表达强壮的方法是句法糖。而不是这样写:
public string GetName()
{
return First + " " + Last;
}
您可以这样写:
public string GetName() => First + " " + Last;
和调用第一个或第二个的结果完全相同。
所有expression body members的情况也是如此。
另一方面,正式表示为here的lambda表达式为:
一个匿名功能,您可以使用该功能 创建代理或表达式树类型。
话虽如此,很明显,尽管语法相似,但有两件事完全不同。