我一直在查看github上的Entity Framework 7源代码,我在TableExpressionBase.cs
中找到了以下属性初始化public override ExpressionType NodeType => ExpressionType.Extension;
我从未在C#中看到=>
运算符的这种用法。我也看了C#6.0中的新内容,但是我没有找到这个结构。有人可以解释它的目的是什么?
感谢。
答案 0 :(得分:2)
这是在C#6.0中添加的新的表达式成员语法。
This article对所添加的内容有一个很好的概述,查找标题" Expression Bodied Functions and Properties"大约3/4的文章。
在C#6.0中添加了很多语法,可以生成代码。它不允许你做你以前不能做的事情,但它会使你必须编写的代码行数变小。
具体来说,如果您有这样的属性:
public TYPE Name
{
get
{
return EXPRESSION;
}
}
然后你现在可以像这样编写这个属性:
public TYPE Name => EXPRESSION;
编译后的代码将完全相同,因此您可以选择要使用的两种语法变体中的哪一种。
你可以用方法做同样的事情:
public string Name(int PARAM1, string PARAM2)
{
return string.Format("{0}, {1}", PARAM1, PARAM2);
}
可以成为:
public string Name(int PARAM1, string PARAM2) => string.Format("{0}, {1}", PARAM1, PARAM2);
这就是它的全部内容。
具体来说,您在EF7代码中看到的属性与此基本相同:
public override ExpressionType NodeType
{
get
{
return ExpressionType.Extension;
}
}
答案 1 :(得分:1)
您怀疑是新的C#6.0功能。
属性和索引器只能有getter和settersgetter 属性和索引器可以有一个表达式主体:
public string Name => First + " " + Last; public Customer this[long id] => store.LookupCustomer(id);
http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx
它只是一种为属性定义getter的简短方法。