2010-07-26 102 views
1

爲什麼我不能擁有這個?我的意思是會不遺餘力的委託聲明:爲什麼我不能使用那樣的匿名方法?

int X=delegate int(){...}; 

我知道這是可以做到這樣:

delegate int IntDelegate(); 
... 
IntDelegate del=delegate(){return 25;}; 
int X=del(); 
+0

你看這個頁面:http://msdn.microsoft.com/en-us/library/0yw3tz5k(VS.80)的.aspx – 2010-07-26 13:06:10

回答

2

托馬斯

將這項工作對您:

delegate int IntDelegate(); 
    // other stuff... 
    IntDelegate _del =() => 25; 

jim

[編輯] - oo PS,剛剛意識到,問題是重新使它成爲一個單一的班輪! - 我會想一想

2

因爲在第一個例子中,你試圖將一個委託類型分配到一個int中,而不是委託的輸出到一個int中。委託是一種存儲函數的類型,它只是返回一個您感興趣的值。

5

委託不是int。

如果您使用的.Net 3.5或更新版本,你可以使用內置的函數功能,而不是使用自定義(Func鍵也有泛型類型,如果你需要一個像Func鍵論據TAGES一個字符串,並返回一個int):

Func<int> X = delegate() { return 255; }; 

或lambda表達式:

Func<int> X =() => 255; 

不幸的是,你不能說:

var X2 =() => 255; 

在C#中,但你可以在F#的函數式語言中做類似的事情。相反,你會說C#中的以下內容:

var X2 = new Func<int>(() => 255); 
2

確實需要創建委託,執行它並返回值嗎? 爲什麼不直接執行代碼?

int x = new Func<int,int>(num => num*num) (3); 

將返回9,但這樣會:

int x = 3*3; 
相關問題