【发布时间】:2011-01-05 23:55:45
【问题描述】:
我正在寻找一种将成员动态添加到动态对象的方法。好的,我想需要澄清一下...
当你这样做时:
dynamic foo = new ExpandoObject();
foo.Bar = 42;
Bar 属性将在运行时动态添加。但是代码仍然“静态地”引用 Bar(名称“Bar”是硬编码的)......如果我想在运行时添加一个属性而不知道它在编译时的名称怎么办?
我知道如何使用DynamicObject 类的方法使用自定义动态对象(实际上是几个月前的blogged about it)来做到这一点,但是我该如何使用any 动态对象?
我可能可以使用IDynamicMetaObjectProvider 接口,但我不明白如何使用它。例如,我应该将什么参数传递给 GetMetaObject 方法? (它需要一个Expression)
顺便问一下,你如何对动态对象进行反射? “常规”反射和TypeDescriptor 不显示动态成员...
任何见解将不胜感激!
【问题讨论】:
-
在 C# 6.0 中,可能是你可以写成
foo.$Bar = 42;:) 不确定是否允许动态... -
@nawfal,实际上,该功能已被删除......但无论如何,
foo.$Bar只是foo["Bar"]的简写 -
Thomas,不知道这个功能被删除了(我很高兴),但是哦,是的,有一刻我忽略了你的 q 的真正要求。
标签: reflection dynamic .net-4.0 c#-4.0 dynamic-language-runtime