泛型的向上转型出错.net3.5解决办法
泛型的向上转型出错.net3.5
系统里有两个类是继承关系,如son继承于parent,我用以下代码就会报错。
ParentClass<parent> li = new Parent<parent>();
li.Add(new parent());
SonClass<son> sli = li;//错误
错误 1 无法将类型“System.Collections.Generic.ParentClass<ConsoleApplication3.parent>”隐式转换为“System.Collections.Generic.SonClass<ConsoleApplication3.son>”
据说这个是3.5的bug在4.0中修正了,但3.5中有什么办法能解决吗?
------解决方案--------------------
系统里有两个类是继承关系,如son继承于parent,我用以下代码就会报错。
ParentClass<parent> li = new Parent<parent>();
li.Add(new parent());
SonClass<son> sli = li;//错误
错误 1 无法将类型“System.Collections.Generic.ParentClass<ConsoleApplication3.parent>”隐式转换为“System.Collections.Generic.SonClass<ConsoleApplication3.son>”
据说这个是3.5的bug在4.0中修正了,但3.5中有什么办法能解决吗?
------解决方案--------------------
- C# code
class Program { public static void Main() { List<Child> children = new List<Child>(); children.Add(new Child()); children.Add(new Parent() as Child); } } class Parent { } class Child : Parent { }
------解决方案--------------------
没有修正什么,只不过有了新的东西,而不是修正。你的代码在.net4.0中也是无法编译通过过,必须推到了重新设计为所谓哦的协变(但是当你了解什么是协变时会发现更多别扭的禁忌)。
“onClass<son> sli = li”这种代码用到哪里也必须立刻看出它是错误的。如果有一个语言编译器说它可以操作,我们还是赶紧扔掉这个不靠谱的语言吧。
------解决方案--------------------
不能算是bug,应该算是.net 3.5编译器的限制.
------解决方案--------------------