日期:2014-05-17  浏览次数:21174 次

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

------解决方案--------------------
List<string> list = new List<string>() { "a", "b" };
List<object> obj = list.Select(x => (object)x).ToList();
------解决方案--------------------
  List<string> list = new List<string>() { "a", "b" };
            List<object> obj = list.Select(T => (object)T).ToList();
          
------解决方案--------------------
另外这不是多态,泛型和类型并不是一个概念
------解决方案--------------------
List<string> sdata=new List<string>();
List<object> data = sdata.Cast<object>().ToList();

------解决方案--------------------
如果利用协/逆变关系可以

  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();