读书人

泛型的向上转型出错.net3.5解决办法

发布时间: 2012-04-09 13:41:25 作者: rapoo

泛型的向上转型出错.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中有什么办法能解决吗?

[解决办法]

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编译器的限制.
[解决办法]
探讨
系统里有两个类是继承关系,如son继承于parent,我用以下代码就会报错。
ParentClass<parent> li = new Parent<parent>();
li.Add(new parent());
SonClass<son> sli = li;//错误

错误1无法将类型“System.Collections.Generic.ParentCl……

读书人网 >C#

热点推荐