子類繼承了父類但是子類的集合並沒有繼承於父類的集合,所以如果使用 子類集合 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; } }