0

鉴于这些类:

public abstract class HostBase
{}
public abstract class ConfigBase
{}
public abstract class HostBase<TConfig> : HostBase where TConfig : ConfigBase
{
    protected internal TConfig Config { get; set; }
}
public class GenericHost : HostBase<Config>
{}
public class HostFactory
{
    public static THost Create<THost, TConfig>(TConfig config)
        where THost : HostBase<TConfig>, new()
        where TConfig : ConfigBase
    {
        return new THost { Config = config };
    } 
}

为什么编译器不能推断TConfigfrom的类型HostFactory.Create<GenericHost>(new Config())?在我看来,只有一种可能的类型TConfig

但是,我没有从编译器中得到推理错误:

类型“ GenericHost”必须可转换为才能在泛型方法“ ”中HostBase<TConfig>用作参数“ ”THostTHost HostFactory.Create<THost, TConfig>(TConfig)

这个错误看起来很奇怪,因为它确实编译:HostBase<Config> h = new GenericHost()

我错过了什么?

4

1 回答 1

2

您不能仅推断方法调用中的某些类型参数。泛型类型推断要么推断所有类型参数,要么不推断。无法从参数推断THost(可能有多个派生自 的类HostBase<Config>),这意味着您基本上不能对该方法使用类型推断。

看看这个具体的例子,我想你会发现使用类型推断很棘手,因为关系的工作方式。

于 2013-07-15T07:44:12.840 回答