我試圖將對象的列表轉換爲使用泛型的父對象。我有類如:C#泛型,將通用列表轉換爲已知的父類?
Entity
Node
OtherClass
其中Node/OtherClass繼承自實體。 我想要做的是這樣的:
Type toType = typeof(Node); // Actually not gotten this way
Object fieldValue = field.GetValue(item);
List<Entity> entities = (List<Entity>)fieldValue;
foreach (Entity toEnt in entities)
{
// Code using toEnt using its Entity attributes...
}
我能夠得到使用字段信息參考的領域,但我無法投列表。字段值是節點引用列表,但它似乎無法將其轉換爲實體列表,因爲它從實體繼承,所以應該可能。
鑄造到節點列表反而工作,但我也希望代碼能夠採取其他類列表。它也不適用於轉換爲對象列表,然後將每個對象轉換爲實體。
我嘗試使用MakeGenericType,這可能是解決方案的一部分,但經過一段時間的嘗試後,我無法使其工作。
謝謝你的時間!
'List'*不會從'List '繼承,即使'Node'確實從'Entity'繼承。您必須創建一個新列表,並在第一個列表中添加「AddRange」。 –
2013-05-14 14:09:46
這是一個常見問題。 Casting列表到列表不會和*不應該*工作。您可以將「OtherNode:Entity」添加到列表,但List 不能包含OtherNode。 (儘管演員,名單*仍然*列表。)轉換是不安全的,因此是非法的。 –
2013-05-14 14:13:17
作爲FYI,更安全(合法)的轉換是從列表到IEnumerable 。 –
2013-05-14 14:14:28