我最近去了一次采访,他们在那里问我以下问题:
根据传入的数据路径编写一个组件以遍历对象层次结构,并返回实现以下方法的属性值:
公共对象getValueFromPath(object parentObj,string dataPath);
对象层次结构将是这样的:
Object1
objectRef2
property1
property2
parentObj将是Object1
dataPath将是objectRef2.property2
有人可以告诉我如何做到这一点。
答案 0 :(得分:5)
您需要使用反射。
第一步是将dataPath
拆分为.
,并获取对代表System.Type
(parentObj
)类型的parentObj.GetType()
对象的引用。
然后,对于路径中的每个元素,您将在.GetMember(...)
对象上使用类似Type
的内容来查找具有该名称的成员,并相应地更新当前的Type
对象。
最后到达该属性后,如果您拥有关联的ProprtyInfo
对象,则需要调用.GetValue(...)
来获取该属性的值。