在具有继承和泛型的 dotnet 核心中无法进行转换



这是我当前的代码(.net core(:

箱子代码:

class Box { }

特殊框代码:

class SpecialBox : Box { }

堆栈代码:

interface Stack<T> where T : Box 
{
AnotherInterface<T> TheFunction();
}

特殊堆栈代码:

class SpecialStack : Stack<SpecialBox> { }

堆栈持有人代码:

class StacksHolder
{
private List<Stack<Box>> Stacks = new List<Stack<Box>>();
}

这是我得到的错误:

如果我尝试将 SpecialStack 添加到堆栈持有者中的堆栈列表中,我会收到以下错误:

无法从"特殊堆栈"转换为"堆栈">

我为此使用的代码:

class StacksHolder
{
private List<Stack<Box>> Stacks = new List<Stack<Box>>();
public StacksHolder()
{
Stacks.Add(new SpecialStack());
}
}

有谁知道为什么这不起作用? 如果有人能解释我,如何解决它,我会很高兴。

提前感谢!

我可以通过将out关键字添加到StackAnotherStack两个接口来解决我的问题。

谢谢@Lee带我找到解决方案!

解决方案代码:

堆栈代码:

interface Stack<out T> where T : Box 
{
AnotherInterface<T> TheFunction();
}

另一个接口代码:

interface AnotherInterface<out T> where T : Box
{
}

相关内容

  • 没有找到相关文章

最新更新