2015-06-20 66 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

及其簡單地更短的方式來定義的吸氣劑爲屬性。