2013-05-16 143 views
10

我想弄清楚匿名函數的C#語法,而且對我來說沒有任何意義。爲什麼這是有效的匿名函數沒有輸入參數

Func<string, string> f = x => { return "Hello, world!"; }; 

但這不是?

Func<string> g = { return "Hello, world!"; }; 

回答

23

第二個仍然需要lambda語法:

Func<string> g =() => { return "Hello, world!"; }; 

在第一個,你有效地寫着:

Func<string, string> f = (x) => { return "Hello, world!"; }; 

但是,在定義時,C#會讓你離開關()一個lambda如果只有一個參數,讓你寫x =>來代替。如果沒有參數,則必須包含()

這C#語言規範的第7.15指定:

在具有單個,隱式類型參數的匿名函數,括號可以從參數列表被省略。換句話說,形式

(PARAM)=>的匿名函數EXPR

可以縮寫爲

PARAM => EXPR

-2

您需要知道函數的定義:

封裝了一個方法,它有一個參數並返回一個值o f 由TResult參數指定的類型。

參考文獻:

Microsoft

+0

'Func鍵'(這是他的第二個例子是使用)是不帶任何參數,並返回一個字符串的函數。 – Servy

+0

他正在使用:http://msdn.microsoft.com/en-us/library/bb534960.aspx –