【发布时间】:2016-10-29 17:22:28
【问题描述】:
我有一个库,它依赖于它接收到的类的 PropertyInfo(获取和设置值)进行大量反射工作。
现在我希望能够使用动态对象,但我找不到如何获取动态属性的 PropertyInfo。我已经检查了替代方案,但对于那些我需要在使用 PropertyInfo 获取/设置值的任何地方进行更改。
dynamic entity = new ExpandoObject();
entity.MyID = 1;
// - Always null
PropertyInfo p = entity.GetType().GetProperty("MyID");
// - Always null
PropertyInfo[] ps = entity.GetType().GetProperties();
// - These are called everywhere in the code
object value = p.GetValue(entity);
p.SetValue(entity, value);
是否有可能以某种方式获取或创建 PropertyInfo 以便能够在动态对象上使用它的 GetValue() 和 SetValue()?
【问题讨论】:
-
我无法重现这个。您确定属性
MyID存在于实体上并且是公开的吗? -
@DavidL 对不起,我会发布一个更好的例子。它是动态的,因此该属性仅在已设置且公开的情况下才会存在。
-
请注意,它可能不是实际属性。一些类型,如
ExpandoObject,通过将运行时绑定重定向到名称/值字典来模拟属性。 -
我也无法重现它,
GetProperties()is 为我的dynamic变量返回一个充满PropertyInfo的数组。
标签: c# dynamic reflection