C# 从动态属性获取值

C# 从动态属性获取值,c#,C#,这将返回d中value2属性的值 我希望属性的值位于value2内,即d.value2.value3 如何实现这一点?在C#4中,只需使用关键字即可对属性进行运行时评估: d.GetType().GetProperty("value2").GetValue(d, null); object e = d.GetType().GetProperty("value2").GetValue(d, null); object f = e.GetType().GetProperty("value3").G

这将返回d中value2属性的值

我希望属性的值位于value2内,即d.value2.value3

如何实现这一点?

在C#4中,只需使用关键字即可对属性进行运行时评估:

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

如果在编译时(编写代码时)知道
value2
value3
,与
d.value2.value3
有什么区别?如果
d
是编译器已知的类型,在这种情况下,使用
dynamic
没有多大用处:它只会在运行时延迟重载解析。假设
value2
字符串仅在运行时可用(从xml文件中读取用于ex.)。这是一个完全错误的exmaple。如果您知道变量的名称和类型,就不应该使用dynamic。当您不知道或不关心类型、名称或属性时,应该使用dynamic。或者,如果您有不同的名称(使用映射动态创建rul并获取值,例如“localhost/path/to/{someVariable}/status”)。
((dynamic) d).value2.value3;