为什么我不能拥有这个?我的意思是它会省去一个代表声明:
int X=delegate int(){...};
我知道可以这样做:
delegate int IntDelegate();
...
IntDelegate del=delegate(){return 25;};
int X=del();
为什么我不能拥有这个?我的意思是它会省去一个代表声明:
int X=delegate int(){...};
我知道可以这样做:
delegate int IntDelegate();
...
IntDelegate del=delegate(){return 25;};
int X=del();
委托不是 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);
托马斯,
这对你有用吗:
delegate int IntDelegate();
// other stuff...
IntDelegate _del = () => 25;
吉姆
[编辑] - 哎呀,刚刚意识到,问题是重新使它成为一个班轮!!- 我会考虑的
因为在第一个示例中,您试图将委托类型分配给 int,而不是将委托的输出分配给 int。委托是一种存储函数的类型,它恰好返回您感兴趣的值。
真的需要创建委托、执行委托并返回值吗?为什么不直接执行代码呢?
int x = new Func<int,int>(num => num*num) (3);
将返回 9,但也会返回:
int x = 3*3;