2013-03-20 44 views
13

我缺少的東西或者是沒可能返回從一個lambda函數的值,如..C#lambda函數:返回數據

Object test =() => { return new Object(); };

string test =() => { return "hello"; };

我獲取構建錯誤「無法將lambda表達式轉換爲鍵入'string',因爲它不是委託類型」。

這就像這個語法分配的lambda而不是lambda的結果,我沒有想到。 我可以通過將函數分配給Func並按名稱調用它來實現所需的功能,但這是唯一的方法嗎?

請不要「你爲什麼需要這樣做?」關於我的例子。

在此先感謝!

+0

@IAbstract你的編輯完全改變了問題,所以我把它回滾。 – 2013-03-20 13:55:51

+0

@KonradRudolph:奇怪......我曾嘗試*刪除最後2行。感謝您的支持。 :) – IAbstract 2013-03-20 16:04:31

+0

[如何使用匿名方法返回值?]可能的重複(http://stackoverflow.com/questions/10520892/how-to-return-value-with-anonymous-method) – Roflo 2015-11-18 17:26:01

回答

32

這是可能的,但你試圖分配一個lambda到string。 - 你需要調用拉姆達:

Func<string> f =() => { return "hello"; }; 
string test = f(); 

錯誤消息實際上說明了一切:

無法轉換lambda表達式到類型 '串'

...這也正是問題在這裏。

如果你想調用lambda內聯 - 但真的:爲什麼? - 你也可以這樣做,你只需要先把它變成一個代表明確:

string test = (new Func<string>(() => { return "hello"; }))(); 
+1

將lambda表達式分配給隱式類型變量將不起作用。 – sloth 2013-03-20 13:50:14

+0

@DominicKexel啊,非常真實。 – 2013-03-20 13:50:36

+0

啊,那很快。只是在你回答時編輯我的問題。是否可以調用lambda內聯而不是分配給Func ? 謝謝! – 2013-03-20 13:52:00