基类 A   子类 B基类方法public List<A> getlist()
{
 return;
}List<B> list =  base.getlist();
怎么达成 上面的目标?

解决方案 »

  1.   

    这涉及到泛型的可变性,可以使用out参数或in参数来实现转换,具体参考文章:http://www.cnblogs.com/zhili/archive/2012/11/12/GenericVari.html
      

  2.   

    List<B> list = base.getlist().Select(x => x as B).ToList();不过从A转换到B需要自己重载显式转换运算符,反之不需要。
      

  3.   

    List<A> 和 List<B> 是完全不相关的两个类型,A、B确定后该泛型就为封闭类型,为指定前是开放类型,除非你详细的知道A\B的内部结构。也可以在泛型参数中指定参数是协变的,这就要求类型 A和B有一定的继承关系(类继承或接口继承)。
      

  4.   

    理解我的问题是 协变与逆变 的问题
    但是怎么具体到我的例子中 要怎么写 还没有看懂这是不行的。建议别人看以前最好自己先看看。谢谢指正,我本来是想说如果使用协变类型 AB要有关系,但不是说能转换。 List<A> 和 List<B> 是完全不相关的两个类型。
      

  5.   

    理解我的问题是 协变与逆变 的问题
    但是怎么具体到我的例子中 要怎么写 还没有看懂这是不行的。建议别人看以前最好自己先看看。谢谢指正,我本来是想说如果使用协变类型 AB要有关系,但不是说能转换。 List<A> 和 List<B> 是完全不相关的两个类型。不是,C#根本没有支持“协变类型”,只是换汤不换药地刷了小手段。
      

  6.   

    如果有 in  out  要怎么写呢?