表情健全的成员与Lambda表情

时间:2019-01-08 19:22:46

标签: c# lambda

  

lambda表达式是被视为对象的代码块(表达式或语句块)。它可以作为参数传递给方法,也可以由方法调用返回。

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

看着这句话,我想知道使用lambda和使用Expression-bodied有什么区别?

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

2 个答案:

答案 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表达式为:

  

一个匿名功能,您可以使用该功能   创建代理或表达式树类型

话虽如此,很明显,尽管语法相似,但有两件事完全不同。