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