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

本文介绍在C#中如何解决子类集合不能直接转换为父类集合的问题,并提供了一个通用的方法来实现这种转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子类继承了父类但是子类的集合并没有继承于父类的集合,所以如果使用 子类集合 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; }
    }

 

转载于:https://www.cnblogs.com/wq8438/p/10613347.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值