0

泛型方法调用 - 没有从“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”不能用作泛型类型或方法“GenerateMockValue”中的类型参数“I”。没有从“IValue”到“IValueFox”的隐式引用转换。

但我不太明白的是,为什么需要任何转换,因为 IValueFox 实现了 IValue。任何人都可以为我澄清这个问题吗?

提前致谢!

4

1 回答 1

3

因为您需要一个 IValueFox,这就像IValue的超集。(每个 IValueFox 都是一个 IValue,但不是每个 IValue 都是一个 IValueFox)

因此,IValue 无法转换为 IValueFox。

where 子句说“我需要一个 IValueFox”,但在 TestFoxValues() 方法中你说“我只是要提供一个 IValue”。

这是一个更简单的例子:你的班级需要一辆车。汽车是轮式机动车辆。然后再往下说“这里,我为你提供了一辆轮式机动车辆,但我没有告诉你它到底是什么。可能是摩托车”然后你的班级说“我明确要求有一辆车!” <== 这是您遇到的错误。

于 2013-04-09T20:50:20.673 回答