【发布时间】:2013-05-14 14:03:39
【问题描述】:
我正在尝试使用泛型将对象列表投射到其父级。我有这样的课程:
Entity
Node
OtherClass
Node/OtherClass 继承自 Entity。 我想做的是这样的:
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...
}
我可以使用 FieldInfo 参考获取该字段,但我无法转换列表。字段值是节点引用列表,但似乎无法将其转换为实体列表,这应该是可能的,因为它继承自实体。
转换为节点列表可以,但我也希望代码能够获取 OtherClass 的列表。将对象转换为 List 对象,然后将每个单独的对象转换为 Entity 也是行不通的。
我尝试使用 MakeGenericType,这可能是解决方案的一部分,但经过一段时间的尝试后我无法让它工作。
感谢您的宝贵时间!
【问题讨论】:
-
A
List<Node>不继承自List<Entity>,即使Node确实继承自Entity。您必须创建一个新列表和AddRange第一个。 -
这是一个常见问题。将 List
转换为 List 不起作用,不应该起作用。您可以将 OtherNode : Entity添加到 List,但 List 不能容纳 OtherNode。 (尽管有强制转换,列表仍然是一个 List 。)转换是不安全的,因此是非法的。 -
一个更安全(合法)的转换是从 List
到 IEnumerable ,仅供参考。
标签: c# .net c#-4.0 generics reflection