定义了collection<T>类,想把collection<B> 强制转换成 collection<A>, 其中B是继承A的,怎么才能转换? 
  
具体程序是先用反射得到了Object result, 
Object results = info.GetValue(Obj, null); 
得到的这个results实质可能的类型是collection<B>,collection<C>,collection<D>, B,C,D都是继承A的,我想把这个results直接转换成 collection<A>,  
我就collection<A> Results =(collection<A>)results; 
  
但总是报错说不能转换,想知道怎样才能实现转换 

解决方案 »

  1.   

    有个Converter<>的泛型,看看
      

  2.   

    只有.4.0才能隐式转换。
        var collection = new Collection<A>( );
                    foreach (var o in results)
                    {
                          collection.Add(o);
                    }
      

  3.   

    全部用Collection<A>;Collection<A> lst = new Collection<A>();
    lst.Add(new B());
      

  4.   


    当然如果是net4,协/逆变是直接支持滴,可以直接转换net4以下,可以cast方法,或者自己foreach转换
      

  5.   

    where T : A这样可以么
      

  6.   


    但是results是通过反射获得的,是个object,怎么遍历呢?
      

  7.   

    你说的collection 是泛型集合还是 算 自定义的?
    自定义的话,转不了
    如果是集合类的话, List<testB> b = new List<testB>(); List<testA> a = (List<testA>)(IEnumerable<testB>)b;
      

  8.   

    前面的不对,不好意思,差点误了别人List<testA>  a=((IEnumerable<testA>)b).ToList();
      

  9.   

    以上方法貌似都不能彻底解决问题,只能是用比较土的方法了,先根据可能的类型判断一下,再按ls们说的新建一个基类的collection,然后遍历元素add进去