表达式体成员与 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.
话虽这么说,但很明显,尽管语法相似,但有两个完全不同的东西。
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.
话虽这么说,但很明显,尽管语法相似,但有两个完全不同的东西。