我试图在C#中使用Reflection来确定运行时集合属性中对象的类型。这些对象是实体框架生成的实体:
Type t = entity.GetType();
PropertyInfo [] propInfo = t.GetProperties();
foreach(PropertyInfo pi in propInfo)
{
if (pi.PropertyType.IsGenericType)
{
if (pi.PropertyType.GetGenericTypeDefinition()
== typeof(EntityCollection<>))
// 'ToString().Contains("EntityCollection"))' removed d2 TimWi's advice
//
// ---> this is where I need to get the underlying type
// ---> of the objects in the collection :-)
// etc.
}
}
如何识别集合所持有的对象类型?
编辑:更新上面的代码,首先添加.IsGenericType查询以使其正常工作
答案 0 :(得分:3)
您可以使用GetGenericArguments()
来检索集合类型的泛型参数(例如,对于EntityCollection<string>
,泛型参数为string
)。由于EntityCollection<>
总是有一个泛型参数,GetGenericArguments()
将始终返回单个元素数组,因此您可以安全地检索该数组的第一个元素:
if (pi.PropertyType.IsGeneric &&
pi.PropertyType.GetGenericTypeDefinition() == typeof(EntityCollection<>))
{
// This is now safe
var elementType = pi.PropertyType.GetGenericArguments()[0];
// ...
}