从动态属性中获取值

3
d.GetType().GetProperty("value2").GetValue(d, null);

这将返回d对象内value2属性的值。

我想要获取value2属性内的属性值,即d.value2.value3。

我该如何实现?

2个回答

7
object e = d.GetType().GetProperty("value2").GetValue(d, null);
object f = e.GetType().GetProperty("value3").GetValue(e, null);

2
在C#4中,只需使用 dynamic 关键字来允许运行时评估属性:
((dynamic) d).value2.value3;

如果在编写代码时您知道value2value3的值,那么d.value2.value3有何不同? - L.B
如果d的类型已经被编译器知道,那么在这种情况下使用dynamic并不会有太多用处:它只会将重载解析推迟到运行时。 - Julien Lebosquain
假设value2字符串仅在运行时可用(例如从XML文件中读取)。 - L.B
这是一个完全错误的例子。如果你知道变量的名称和类型,你永远不应该使用 dynamic 。而当你不知道或者不关心类型、名称或属性时,你应该使用 dynamic 。又或者,例如使用映射创建规则的动态生成并获取值的过程中存在不同的名称(例如 "localhost/path/to/{someVariable}/status")。 - Artem A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接