日期:2014-05-18  浏览次数:20779 次

泛型的向上转型出错.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……