【发布时间】:2014-03-04 01:05:24
【问题描述】:
我正在使用反射来获取特定对象的所有属性并对其进行迭代。
我将这些属性称为props。
当那些是非列表对象时,这一切都很好。
我需要一种方法来知道我正在迭代的道具何时是一个列表(例如,我看到有一个 prop.PropertyType.IsArray,但没有一个用于列表)。
我在这里看到他们建议使用的Determine if a property is a kind of array by reflection:
property.PropertyType.GetInterface(typeof(IEnumerable<>).FullName) != null
但这对我来说还不够好,因为 string 也实现了这一点。
(现在我正在检查prop.Namespace 中是否包含“集合”,显然是在寻找更好的方法)。
完成之后,我有一个可行的假设,即 List 将是一个复杂对象的 List。 (但可能是几个复杂的项目之一,所以我不知道是哪个)
更难的部分是我需要遍历这些对象并获取 他们的 成员,但没有这样做。
所以如果我有List<TestObject> 作为我的prop,我需要有一个foreach (TestObject testObj in prop)(在概念上)。
这里没有合理的尝试,因为我还没有找到将prop 视为复杂对象的列表并对其进行迭代的方法。
编辑:我已经设法通过prop.GetValue(reflectedObject) 获得了价值,但我必须将其转换为List<MyComplexObject>
【问题讨论】:
标签: c# reflection