繁体   English   中英

表达式主体成员与 Lambda 表达式

[英]Expression-bodied members vs Lambda expressions

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

(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 表达式执行相同操作的区别。在这里您指定返回类型和名称):

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

代替

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

您还可以使用它来编写 getter 和 setter

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);

这也适用于分配给属性。

表达体方法是语法糖。 而不是写这个:

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

你可以这样写:

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

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

各种表情体成员也是如此。

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

可用于创建委托或表达式树类型匿名函数

话虽如此,很明显,尽管语法相似,但有两种完全不同的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM