2010-07-26 75 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; 
相关问题