作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下代码:
public static class X
{
public static C Test<A,B,C>(this A a, Func<B,C> f)
where C:class
{
return null;
}
}
public class Bar
{
public Bar()
{
this.Test(foo); //this doesn't compile
this.Test((Func<int, string>)foo);
this.Test((int q) => "xxx");
}
string foo(int a) { return ""; }
}
为什么标记的行不能编译?它与不属于签名的返回类型有关吗?
但是第三行确实编译了,这让我猜测编译器将它变成了类似于第二行的东西......
最佳答案
基本上,规范第 7.5.2 节中描述的类型推断过程在方法组转换方面相对较弱。在带注释的标准中,第 7.5.2.6 节讨论了输出类型推断——包括方法组——Vladimir Reshetnikov 的注释指出:
This step [method group output type inference] applies only if all method type parameters occurring in the delegate parameter types are already fixed. Overload resolution does not try to select the best method based on incomplete type information.
我相信这正是这里的问题 - 当然,您实际上只有一个可以调用的方法,并且方法组只包含一个方法,但是类型推断过程还不够强大,无法将两者联系在一起.
关于C# 根据传递的委托(delegate)推断泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7400550/
我是一名优秀的程序员,十分优秀!