【发布时间】:2014-08-27 04:47:10
【问题描述】:
我正在尝试从未知类型的类中获取所有 ICollection<T> 属性。此外,类型 T(集合是什么)在编译时是未知的。首先我尝试过这种方法:
foreach (var property in entity.GetType().GetProperties())
{
if (typeof(ICollection).IsAssignableFrom(property.PropertyType) || typeof(ICollection<>).IsAssignableFrom(property.PropertyType))
{
// do something
}
}
但它不起作用(即使 ICollection 属性也评估为 false)。
我是这样工作的:
foreach (var property in entity.GetType().GetProperties())
{
var getMethod = property.GetGetMethod();
var test = getMethod.Invoke(entity, null);
if (test is ICollection)
{
// do something
}
}
但我不想执行所有吸气剂。为什么第一段代码不起作用?如何在不执行所有 getter 的情况下找到 ICollection 属性?
【问题讨论】:
-
ICollection和ICollection<T>是不同的类型。你真正对哪个感兴趣? -
我只对 ICollection
属性感兴趣(例如 public virtual ICollection Notes { get; set; })。在使用 EF 和 POCO(分离)对象时,我正在尝试解决具有多对多关系的添加/更新对象。为此,我需要获取任何类(未知)的 ICollection 属性,然后获取该属性的值,即集合的元素。 -
反射很慢。您是否考虑过将 T4 用于代码生成?然而,这感觉非常 XY,我怀疑你可以用泛型解决你的大部分实际问题......PS 你有没有考虑过你将如何处理循环关系?
标签: c# reflection