【问题标题】:Add property to ExpandoObject with the same name as a string向 ExpandoObject 添加与字符串同名的属性
【发布时间】:2012-04-07 04:02:11
【问题描述】:

有没有办法将属性添加到与字符串值同名的 ExpandoObject?

例如,如果我有:

string propName = "ProductNumber";
dynamic obj = new System.Dynamic.ExpandoObject();

我可以像这样创建属性 ProductNumber:

obj.ProductNumber = 123;

但是,我可以根据字符串propName 创建属性obj.ProductNumber 吗?因此,如果我不知道该属性的名称将是什么高级,我可以根据此输入创建它。如果 ExpandoObject 无法做到这一点,我应该研究 C# 的任何其他领域吗?

【问题讨论】:

标签: c# dynamic expandoobject


【解决方案1】:

ExpandoObject 实现IDictionary<string, object>:

((IDictionary<string, object>)obj)[propName] = propValue

我不知道您是否可以将索引器语法与dynamic 引用一起使用(即,没有演员表),但您当然可以尝试并找出答案。

【讨论】:

  • 您无法像在第一个示例中那样为 ExpandoObject 建立索引
  • 第二个例子很好。第一个例子给出了Cannot apply indexing with [] to an expression of type 'System.Dynamic.ExpandoObject'
  • @Paul 谢谢——我忘记了索引器是一个显式的接口实现。答案已编辑。
  • @VBRonPaulFan 是的,我忘记了接口实现是显式的。我已经编辑了答案。
  • 伙计,我很高兴找到这篇文章。我正要从其他一些教程中实现一些对象的 DynamicObject 只是为了获得这种能力。节省生命和时间谢谢! :D
【解决方案2】:

将ExpandoObject 转换为IDictionary&lt;string,object&gt; 以执行此操作:

string propName = "ProductNumber";
dynamic obj = new System.Dynamic.ExpandoObject();
var dict = (IDictionary<string,object>)obj;
dict[propName] = 123;

【讨论】:

  • +1 至少提到ExpandoObject 在下面是IDictionary&lt;string,object&gt;。 See docs
猜你喜欢
  • 2011-06-23
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
相关资源
最近更新 更多