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