为什么会出现“类型参数必须始终有效……”错误?
|
我将尝试简化此代码示例:
public interface IThing
{
//... Stuff
}
public class Thing1 : IThing
{
}
public class Thing2 : IThing
{
}
public interface IThingView<out T>
{
ICollection<T> ViewAll();
}
public class ThingView<T> : IThingView<T>
{
ICollection<T> ViewAll() { return new List<T>(); } // There\'s a big operation here
}
public interface IThingViewerFactory
{
public IThingView<IThing> Build(string Which);
}
public class ThingViewerFactory
{
public IThingView<IThing> Build(string Which)
{
if(Which.Equals(\"Thing1\") { return new (IThingView<IThing>)new ThingViewer<Thing1>();}
else { return new (IThingView<IThing>)new ThingViewer<Thing2>();}
}
}
那是我在做什么的一个粗略想法。我有许多需要查看器的Thing类,它们将遵循一个公共接口。我想要一个工厂来生成这些文件,方法是传入一个带有名称的字符串。我一直在抱怨编译器错误:
无效的差异:类型参数\'T \'必须在\'IThingView.ViewAll()\'上始终有效。 \'T \'是协变的。
我意识到即使我能做到这一点,我之后也必须做一些转换……我很好。我意识到这种方法很有可能不是必需的。在这一点上,这已经成为一个更多的骄傲/好奇心问题。
谢谢!
没有找到相关结果
已邀请:
2 个回复
赐黄
,因为它允许您将
放入其中。 您可以创建协变只读集合,逆变只写集合或不变读写集合。 您不能两者都做,否则就不是类型安全的。
贡炮逗握惫
的返回类型从
更改为
。