我现在有个需求,想把子类的对象集合赋值给父类引用集合,出例:
List<object> obj = new List<string>();
string是继承至Object类的,按说应该可以的,但是语法上不允许,
请问大虾们有木有解决办法?

解决方案 »

  1.   

    List<string> list = new List<string>() { "a", "b" };
    List<object> obj = list.Select(x => (object)x).ToList();
      

  2.   

      List<string> list = new List<string>() { "a", "b" };
                List<object> obj = list.Select(T => (object)T).ToList();
              
      

  3.   

    直接生成List<object> obj = new List<object>();List<object> temp= new List<object>();
    temp.Add("aa");
    temp.Add("bb");foreach (object str in temp)
         Console.WriteLine(str);List<object> obj = new List<string>(); 
    //这里是不能用string的,因为它和obj类型不一样, List<object>.
      

  4.   

    List<object> obj = new List<string>()
    obj.Add(1);
    这就是你的按理说可以?
      

  5.   

    问下这 x=>(object)x 是不是linq的语法?
      

  6.   

    new List<string>().Cast<object>().ToList()至于这个东西在net4有新规定,自己查泛型的协变和逆变
      

  7.   

    List<string> sdata=new List<string>();
    List<object> data = sdata.Cast<object>().ToList();
      

  8.   

    如果利用协/逆变关系可以  List<string> a = new List<string> { "1", "2" };
       List<object> b = a.Cast<object>().ToList();
      //下面的就是net4后的协/逆变关系,因为list<T>本身木有实现协/逆申明,但是IEnumerable<T>则申明
    //了协/逆,所以他可以强制进行这种转换
       List<object> c =((IEnumerable<object>)a.AsEnumerable()).ToList();
     
      

  9.   

    额,上面我还多写了一步应该一步就能转换List<object> c =((IEnumerable<object>)a).ToList();
      

  10.   

    其实你不使用泛型就可以,泛型运行时会消除(Java这样,C#我不确定,错了请大家指出)。
      

  11.   


    CLR事实上并不支持"协变和逆变",所以只能小修小补地给接口、委托这样非具体类型增加协变和逆变,事实上就是骗骗编译器的小把戏罢了。
      

  12.   


    lambda表达式,唉,昨天连夜学了一下!!压力啊