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刪除。