C# 如何在C中浏览对象层次结构#

C# 如何在C中浏览对象层次结构#,c#,.net,C#,.net,我最近参加了一次面试,他们问了我以下问题: 根据传入的数据路径编写组件以遍历对象层次结构,并返回实现以下方法的属性值: 公共对象getValueFromPath(对象parentObj,字符串dataPath) 对象层次结构如下所示: Object1 objectRef2 property1 property2 parentObj将是Object1 数据路径将为objectRef2.property2 有人能告诉我怎么做吗。你需要使用反射 第一步是在上拆分数据路径,并获取对

我最近参加了一次面试,他们问了我以下问题:

根据传入的数据路径编写组件以遍历对象层次结构,并返回实现以下方法的属性值:

公共对象getValueFromPath(对象parentObj,字符串dataPath)

对象层次结构如下所示:

Object1
  objectRef2
    property1
    property2
parentObj将是Object1

数据路径将为objectRef2.property2


有人能告诉我怎么做吗。

你需要使用反射

第一步是在
上拆分
数据路径
,并获取对
系统.Type
对象的引用,该对象表示
parentObj
parentObj.GetType()
)的类型

然后,对于路径中的每个元素,您可以在
Type
对象上使用类似
.GetMember(…)
的内容来查找具有该名称的成员,并相应地更新当前
Type
对象


一旦到达末尾的属性,并且有了关联的
propertyinfo
对象,您就需要调用
.GetValue(…)
来获取属性的值。

您需要使用反射

第一步是在
上拆分
数据路径
,并获取对
系统.Type
对象的引用,该对象表示
parentObj
parentObj.GetType()
)的类型

然后,对于路径中的每个元素,您可以在
Type
对象上使用类似
.GetMember(…)
的内容来查找具有该名称的成员,并相应地更新当前
Type
对象


一旦你在最后到达属性,并且你有了相关的
propertyinfo
对象,你就需要调用
.GetValue(…)
来获取属性的值。

这似乎不是一个很清楚的面试问题。@scott,对我来说已经足够清楚了。这是为了表达受访者对反思的熟悉程度。这是一个你可以问的典型而琐碎的反思问题,所以对我来说似乎是公平的。@Kirk现在这个问题已经编辑好了,我明白了:)也许这是一个“诡计”问题。正确的答案是“需求令人困惑,你能澄清一下吗?”我能用什么想法或简短的代码片段来实现这个吗?这似乎不是一个非常清楚的面试问题。@scott,对我来说似乎足够清楚了。这是为了表达受访者对反思的熟悉程度。这是一个你可以问的典型而琐碎的反思问题,所以对我来说似乎是公平的。@Kirk现在这个问题已经编辑好了,我明白了:)也许这是一个“诡计”问题。正确的答案是“需求很混乱,你能澄清一下吗?”我有什么想法或简短的代码片段可以用来实现这个吗?谢谢@@Andrew。我对思考很陌生。你能给我一个简短的代码片段吗?@HRK,他可以,但你只要阅读API文档(,等等)就更好了。这不是一个很难的API,而且很明显你没有太多地使用它,所以现在是时候使用API并弄清楚它是如何工作的了。当然可以。我会设法解决的,如果有什么问题,我会回来的。谢谢@@安德鲁。我对思考很陌生。你能给我一个简短的代码片段吗?@HRK,他可以,但你只要阅读API文档(,等等)就更好了。这不是一个很难的API,而且很明显你没有太多地使用它,所以现在是时候使用API并弄清楚它是如何工作的了。当然可以。我会设法解决的,如果我有任何问题,我会回来的。