1

为什么我不能拥有这个?我的意思是它会省去一个代表声明:

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

我知道可以这样做:

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

4 回答 4

5

委托不是 int。

如果您使用 .Net 3.5 或更高版本,则可以使用内置的 Func 而不是使用自定义(如果您需要像 Func 这样标记字符串并返回 int 的参数,Func 也有通用类型):

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

或使用 lambda 表达式:

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

不幸的是,你不能说:

var X2 = () => 255;

在 C# 中,但您可以在 F# 等函数式语言中执行类似的操作。相反,您会在 C# 中说以下内容:

var X2 = new Func<int>(() => 255);
于 2010-07-26T13:05:54.593 回答
2

托马斯,

这对你有用吗:

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

吉姆

[编辑] - 哎呀,刚刚意识到,问题是重新使它成为一个班轮!!- 我会考虑的

于 2010-07-26T13:03:54.810 回答
2

因为在第一个示例中,您试图将委托类型分配给 int,而不是将委托的输出分配给 int。委托是一种存储函数的类型,它恰好返回您感兴趣的值。

于 2010-07-26T13:04:21.350 回答
2

真的需要创建委托、执行委托并返回值吗?为什么不直接执行代码呢?

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

将返回 9,但也会返回:

int x = 3*3;
于 2010-07-26T13:13:48.683 回答