为什么第一个和第三个表达式有效但不是第二个?
var ss = new Func<int>(() => 0); //works
int x1 = new Func<int>(() => 0); //doesn't work --?Cannot convert source type 'System.Func<int>' to target type 'int'
int x2 = new Func<string,int>((x) => 0)(""); //works
Run Code Online (Sandbox Code Playgroud)
同
var ss = new Func<int>(() => 0);
Run Code Online (Sandbox Code Playgroud)
编译器能够正确地推断出实际类型ss是Func<int>.Func<int>是一个可以调用并返回的委托int.所以:
ss() == 0 // is true
Run Code Online (Sandbox Code Playgroud)
请注意,我们必须在ss这里调用(例如ss())以便它返回一个int.
因此,知道我们从上面做什么,以下是不对的
int x1 = new Func<int>(() => 0);
Run Code Online (Sandbox Code Playgroud)
因为您现在正在尝试将函数/委托(与前一个相同)存储到键入的变量中int.它是一个类型的委托Func<int>......与a 非常不同int,它是在调用/调用时返回的东西int.
在这种情况下
int x2 = new Func<string,int>((x) => 0)("");
Run Code Online (Sandbox Code Playgroud)
你声明一个函数,它接受一个字符串作为参数并返回一个函数int,然后立即调用它(提供一个未使用的空字符串""作为参数).然后该函数返回int您随后存储的函数x2.
现在更有意义吗?
| 归档时间: |
|
| 查看次数: |
2687 次 |
| 最近记录: |