2013-02-15 75 views
1

與下面最接近的是什麼?不幸的是,以下給我一個方法名稱編譯錯誤。匿名lambda?

int val = delegate(string s) 
{ 
    return 1; 
}("test"); 

我也試過(...)=> {...}語法,但有它非常錯誤的

+1

C#不是JavaScript,你知道嗎? – Oded 2013-02-15 14:28:16

+0

你想做什麼? – 2013-02-15 14:28:21

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2013-02-15 14:55:07

回答

9

這兩種形式的匿名函數(lambda表達式和匿名方法)都需要特定類型才能轉換爲。因此,這是有效的:

int val = ((Func<string, int>)(delegate(string s) 
{ 
    return 1; 
}))("test"); 

所以是這樣的:

int val = ((Func<string, int>)(s => 1))("test"); 

我不實際使用其中任何雖然建議。這是更具可讀性使用一個單獨的局部變量:(你可以使用構造函數的語法爲好,按yBee的答案 - 但我個人比較喜歡投風格的語法)

Func<string, int> del = s => 1; 
int val = del("test"); 

+0

太棒了。如果你需要多於一行來解決返回,語法是:'Func del =(s)=> {return 1; };'。 – Graham 2013-02-15 14:33:57

+0

我比'((Func ...)(lambda))(...)':)更喜歡'new Func ..(lambda)(...)' – nawfal 2014-07-06 20:09:22

4

以下將編譯:

int val = ((Func<string, int>)(s => 1))("test"); 

但是,這並不看起來對我非常有用。

5
new Func<string, int>(s => 1)("test") 
相關問題