为什么我会收到“类型参数必须为空...”错误?我会尽量缩短这个代码示例:publicinterfaceIThing{//...Stuff}}publicclassThingView:IThingView{ICollectionViewAll(){returnnewList();}//这里有一个大操作}publicinterfaceIThingViewerFactory{publicIThingViewBuild(stringWhich);}publicclassThingViewerFactory{publicIThingViewBuild(stringWhich){if(Which.Equals("Thing1"){returnnew(IThingView)newThingViewer();}else{returnnew(IThingView)newThingViewer();}}}这是我在做什么的粗略想法。我有很多需要View实现程序的Thing类,它们将遵循一个通用接口。我希望工厂通过向我传递一个带有名称的字符串来生成这些类。我保留抱怨编译错误:无效方差:类型参数“T”必须在“IThingView.ViewAll()”中无效。“T”是协变的。我意识到即使我让它工作,我也必须做一些铸造......我很好。我意识到这种方法可能没有必要。在这一点上,这已成为骄傲/好奇的问题。谢谢!你不能创建协变ICollection因为它允许你把T进去。您可以创建协变只读集合、逆变只写集合或不可变读写集合。你不能两者都做,否则它不是类型安全的。扩展SLak的回答:为了编译代码,ViewAll的返回类型从ICollection更改为IEnumerable。以上是C#学习教程:为什么会出现“typeparametermustbevoid...”的错误?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
