泛型方法调用 - 没有从“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);
...
}
当我在方法'TestFoxValues'中调用'GenerateMockValue'时出现以下错误:
'IValue'不能用作泛型类型中的类型参数“I”或 方法'GenerateMockValue'。没有隐含的参考 从'IValue'转换为'IValueFox'。
但我真正理解的是,为什么需要进行任何转换,因为IValueFox实现了IValue。谁能为我澄清这个问题?
提前致谢!
答案 0 :(得分:3)
因为您需要IValueFox,就像 IValue的超集。 (每个IValueFox都是IValue,但不是每个IValue都是IValueFox)
因此,IValue无法转换为IValueFox。
where子句说“我需要一个IValueFox”,但在TestFoxValues()方法中,你说“我只是要提供一个IValue。”
这是一个更简单的例子: 你的课需要一辆车。汽车是轮式汽车。 然后再往下说“在这里,我为你提供了一辆轮式汽车,但我并没有告诉你到底是什么。可能是一辆摩托车”然后你上课说“我明确要求开车了!” &lt; ==这是你得到的错误。