gpt4 book ai didi

C# 根据传递的委托(delegate)推断泛型类型

转载 作者:太空狗 更新时间:2023-10-29 20:21:45 28 4
gpt4 key购买 nike

我有以下代码:

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com