本帖最后由 wangkai2602330 于 2011-10-06 22:14:48 编辑

解决方案 »

  1.   


    static void Main(string[] args)
            {
                List<string> strs = new List<string>();
                strs.Add("1");
                strs.Add("2");
                strs.Add("3");
                strs.Add("4");            List<object> objs = strs.ConvertAll(new Converter<string, object>(StrToObj));            foreach (object item in objs)
                {
                    Console.WriteLine(item);
                }
                Console.ReadLine();
            }
            public static object StrToObj(string str)
            {
                return str;
            }
      

  2.   

    1.IList<T>中的T不是协变参数,所以IList<derive>不能转化为IList<base>
    不过IList<T>继承了IEnumerable<T>。IEnumerable<T>的参数是协变参数,如果只是为了输出其中的元素,把IList<string>转化为IEnumerable<object>是可以的。2.逆变和协变只能用于接口和委托,List<T>是类,不支持逆变和协变这个从逻辑上也很好理解
    如果允许IList<string>转化成IList<object>,那不是可以往里面添加任何东西了,然后写出这样的代码:
    objs.Add(new Control());
    int iLength=strs[2].Length();
    那样搞个范型出来也没意义了,任何XXX<T>都能转化为XXX<object>的话还不如直接用object
      

  3.   

    原理ls讲了,基本正确。List<string> strs = new List<string>();
    strs.Add("a");
    strs.Add("b");
    List<object> objs = strs.Select(x => (object)x).ToList();