我有一个 ExpandoObject
对象,并想为它创建一个getter,在运行时通过名称返回属性,其中名称由字符串指定而不是硬编码。
例如,我可以这样做:
account.features.isEmailEnabled;
并且这将返回true。 account
是一个ExpandoObject
,而features
也是一个ExpandoObject
。因此,我有一个包含其他ExpandoObjects
的ExpandoObject
。
所以我想做的是这样的:
account.features.GetProperty("isEmailEnabled");
原因是我有很多功能,并且我想能够编写一个通用的getter方法,在这个方法中,我可以传入我想要的功能名称,该方法将返回account.features.whatever的值(其中“whatever”由向通用getter方法传递字符串来指定)。否则,我将不得不为每个功能编写30多个getter。
我进行了大量的研究并尝试做一些像:
var prop = account.features.GetType();
// this returns System.Dyanmic.ExpandoObject
随后是
var value = prop.GetProperty(featureNameAsString);
但是value
总是返回null。我不明白为什么。在观察窗口中,我可以执行account.features.isEmailEnabled
并显示true,并表示它是布尔值。但是,如果我尝试使用上述方法获取此值并将isEmailEnabled
作为featureNameAsString
传递,我只会得到null。
请问有人能告诉我可能做错了什么以及一个好的方法(不要太复杂)吗?
我正在使用ASP.NET 4.5.1框架。