C#List<子类>转List<父类>或者Obj对象转List


子类继承了父类但是子类的集合并没有继承于父类的集合,所以如果使用 子类集合 as 父类集合 这种方式进行转换时转换得到的将是null。
分析和实现:
试验时发现对象数组不受此限制,原因可能是集合存储的是数组内每一个对象指针的合集,而集合存储的是集合对象,所以存在此差别.
C#中的集合分为泛型集合与非泛型集合分别位于System.Collections和System.Collections.Generic两个命名空间下,尝试的过程中发现任何对象的泛型集合都可强制的转换为System.Collections.ICollection这个非泛型集合,可通过遍历此非泛型集合对集合中的每一项进行转换。


 class Program
    {

        static void Main(string[] args)
        { 
            List<子类> pts = new List<子类>();
            pts.Add(new 子类() { name = "wq", Sex = "" }); 
            object listObj = pts;
            List<父类> points = PraseList<父类>(listObj); 
            foreach (var pt in points)
            {
                pt.name = "改名了呀";
            } 
        }

        private static List<T> PraseList<T>(object listObj)
        {
            List<T> result = new List<T>();
            if (!listObj.GetType().IsGenericType)
                throw new Exception("非集合类型");
            if (listObj as System.Collections.ICollection != null)
            {
                var list = (System.Collections.ICollection)listObj;
                if (list.Count > 0)
                {
                    foreach (var item in list)
                    {
                        result.Add((T)item);
                    }
                }
            } 
            return result;
        }

    }

    internal class 父类
    {
        internal string name
        {
            set; get;
        }
        internal string Sex { set; get; }
    } 
    internal class 子类 : 父类
    {
        internal string age { set; get; }
    }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。