2015-06-20 69 views
6

我一直在寻找到实体框架7的源代码上github我发现以下属性初始化中TableExpressionBase.cs初始化与=>(这样)

public override ExpressionType NodeType => ExpressionType.Extension; 

我从来没见过=>运营商的这种用法在C#中。我也看过C#6.0中的新东西,但是我还没有找到这个构造。有人可以解释它的目的是什么吗?

谢谢。

回答

2

这是在C#6.0中添加的新的表达式成员语法。

This article有一个很好的被添加的东西的概要,寻找标题“表达主体的功能和属性”约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; 
    } 
} 
+0

https://msdn.microsoft.com/en-us/magazine/dn802602.aspx,在'Expression Bodied Functions and Properties'子标题下 – sstan

+0

谢谢,已编辑文章。 –

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

及其简单地更短的方式来定义的吸气剂为属性。