【发布时间】:2013-10-08 23:37:15
【问题描述】:
我有一个 ExpandoObject 并想为它创建一个 getter,它将在运行时按名称返回一个属性,其中名称是在字符串中指定的,而不是硬编码的。
例如,我可以这样做:
account.features.isEmailEnabled;
这将返回 true。 account 是 ExpandoObject,features 也是 ExpandoObject。所以我有一个ExpandoObject,其中包含其他ExpandoObjects。
所以我想做的是:
account.features.GetProperty("isEmailEnabled");
并让它返回 true。
原因是我有很多功能,我希望能够编写一个通用的 getter 方法,我可以在其中传入我想要的功能的名称,该方法会将 account.features 的值传回给我.whatever(通过将字符串传递给通用 getter 方法来指定“whatever”)。否则我将不得不为每个功能编写 30 多个 getter。
我做了很多研究并尝试做类似的事情:
var prop = account.features.GetType();
// this returns System.Dyanmic.ExpandoObject
紧随其后
var value = prop.GetProperty(featureNameAsString);
但value 总是返回为空。我不明白为什么。在监视窗口中,我可以执行account.features.isEmailEnabled,它显示为真并表示它是一个布尔值。但是,如果我尝试使用上述方法获取此值并将isEmailEnabled 作为featureNameAsString 传递,我只会得到空值。
谁能告诉我我可能做错了什么以及什么是好的方法,而不是太复杂?
我在 4.5.1 框架下使用 ASP.NET。
【问题讨论】:
标签: c# asp.net oop dynamic reflection