泛型方法调用转换错误的原因
本文关键字:错误 调用 转换 泛型方法 | 更新日期: 2023-09-27 18:08:14
泛型方法调用-没有从'IValue'到'IValueFox'的隐式引用转换。这段代码是怎么回事?
public interface IValueFox : IValue
{
...
}
private Mock<I> GenerateMockValue<I, T>(State state, T type)
where I : class, IValueFox
{
...
}
private void TestFoxValues()
{
var newFox = this.GenerateMockValue<IValue, object>(State.Red, null);
...
}
并得到以下错误,当我调用'GenerateMockValue'方法'TestFoxValues':
'IValue'不能用作泛型类型or中的类型参数'I'"GenerateMockValue"方法。没有隐含的参考从'IValue'到'IValueFox'的转换。
但我真的不明白的是,为什么任何转换是需要的,因为IValueFox实现了IValue。有人能给我解释一下这个问题吗?
提前感谢!
因为你需要一个IValueFox,这就像 IValue的超集。(每个IValueFox都是IValue,但不是每个IValue都是IValueFox)
因此IValue不能转换为IValueFox。
where-子句说"我需要一个IValueFox",但在TestFoxValues()方法中,你说"我只是要提供一个IValue"。
这里有一个更简单的例子:你们班需要一辆车。汽车是一种带轮子的机动车辆。然后再往下说,"在这里,我为你提供一辆轮式机动车辆,但我不会告诉你它到底是什么。可能是一辆摩托车,然后你的班级说,"我明确要求一辆汽车!"<==这是您得到的错误