通过字符串获取动态属性值
本文关键字:属性 动态 获取 字符串 | 更新日期: 2023-09-27 18:24:51
我有一个从WebMatrix.Data生成的动态对象:
dynamic obj; [WebMatrix.Data.DynamicRecord]
所以做这样的事情很好:
int ID = obj.ID;
但是,尝试通过如下所示的字符串访问该属性:
obj.GetType().GetProperty("ID").GetValue(obj, null);
我收到以下错误:Cannot perform runtime binding on a null reference
我假设WebMatrix.Data.DynamicRecord
类型与dynamic
类型不同?但它被宣布为dynamic
.
以下内容确实返回具有整个值数组的WebMatrix.Data.DynamicRecord
类型:
obj.GetType();
但是,以下内容返回值为 null
的dynamic
类型:
obj.GetType().GetProperty("ID");
我猜这就是错误的原因,但是为什么当obj.ID
不返回null
时它为空?
如何通过字符串获取属性?
我猜这就是错误的原因,但是为什么当 obj.ID 不返回 null 时它是空的?
GetProperty()
将查找该类型的 CLR 属性。动态属性访问并不总是这样工作的 - DynamicRecord
派生自DynamicObject
,我怀疑它覆盖了用于属性访问(除其他外(的TryGetMember
方法。所以基本上,这是一个只能动态可用的属性。
如果你知道obj
永远是一个DynamicObject
,你可以随时投靠它并自己打电话给TryGetMember
......尽管您必须创建自己的GetMemberBinder
。这有点尴尬,但看起来唯一的抽象成员是FallbackGetMember
,所以你只需要弄清楚如何实现它。