C#GenericsImplicitCastFailedonInterface为什么下面的编译不通过?当T是一个接口时,导致编译器认为它不能从Container转到T的接口有什么特别之处?我不认为这是一个协方差问题,因为我不倾向于,但也许是。很像Whydoesn'ttheC#compilercalltheimplicitconversionoperator?但我认为这并不完全相同。产品pIn=null;产品输出;容器pContainer;列表pListIn=null;列出pListOut;容器<列表>pListContainer;IListpIListIn=null;IListpIListOut;容器pIListContainer;pContainer=pIn;pOut=p容器;//一切顺利pListContainer=pListIn;pListOut=pListContainer;//一切都很好pIListContainer=pIListIn;//失败,由于某种原因不能进行隐式转换pIListOut=pIListContainer;//这里也是classContainer{privateTvalue;私有容器(T项目){值=项目;}publicstaticimplicitoperatorContainer(Titem){returnnewContainer(item);}publicstaticimplicitoperatorT(Containercontainer){returncontainer.value;}}无法将类型“Container”隐式转换为“IList”。存在显式转换(是否缺少强制转换?)无法将类型“IList”隐式转换为“Container”。存在显式转换(您是否缺少转换?)这可能是模棱两可的,因为您尝试转换的类型可以实现接口本身——此时cast是什么意思?像普通转换一样的引用转换,还是调用用户定义的转换?来自C#4规范的第10.3.3节:对于给定的源类型S和目标类型T,如果S或T是可空类型,则让S0和T0引用它们的基础类型,否则S0和T0分别等于S和T。仅当满足以下所有条件时,才允许将类或结构声明从源类型S转换为目标类型T:然后:运算符可以在泛型类型上声明,但是,对于特定类型参数指定为存在预定义转换的转换...如果两种类型之间存在预定义转换,则忽略这些类型之间的任何用户定义转换。特殊:注意这里的第一个嵌套项目符号。(顺便说一下,我完全可以推荐掌握规范。它可以在网上以各种版本和格式获得,但硬拷贝注释版本对团队和其他人来说也是一个小金块。我应该承认这里有一些偏见,因为我是一个注释者的——但忽略我的东西,所有其他评论都值得一读!)以上就是C#学习教程的全部内容:C#泛型接口上的隐式转换失败,如果对大家有用还需要进一步了解C#学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: