【问题标题】:Is it possible to use ExpandoObject to create run-time properties?是否可以使用 ExpandoObject 创建运行时属性?
【发布时间】:2011-03-15 11:07:26
【问题描述】:

通常,我们可以创建这样的属性,

dynamic expando = new ExpandoObject();
expando.Price = 45k;
expando.Value = "Good";

就我而言,直到运行时我才知道“价格”或“价值”等属性。如何,我可以创建这样的动态属性。类似的,

dynamic expando = new ExpandoObject();
expando[properties[0]] = 45k;
expando[properties[1]] = "Good";
expando[properties[2]] = "Red";
expando[properties[3]] = 8;

反正要实现这种行为。

【问题讨论】:

标签: c# dynamic expandoobject


【解决方案1】:

只需使用它实现IDictionary<string, Object>的事实:

IDictionary<string, Object> expando = new ExpandoObject();
expando[properties[0]] = 45;
expando[properties[1]] = "Good";
expando[properties[2]] = "Red";
expando[properties[3]] = 8;

dynamic d = expando;
// Now use the properties as normal

另一方面,如果您直到执行时才知道属性,那么实际上会消耗它们什么?使用ExpandoObject可能仍然有意义 - 但同样可能使用Dictionary&lt;string, object&gt; 开始有意义。

【讨论】:

  • 感谢您的建议。我有 AdomdDataReader 对象。由于没有网格控件支持将 AdomdData 对象绑定为 ItemsSource,因此我想从 ADR 生成一个更轻量的可枚举源。为此,我正在研究动态,因为大多数网格控件都支持动态绑定。再次感谢。
  • +1,特别是指出在这种情况下使用 ExpandoObject 可能很愚蠢。目前正在重构我的代码以改用普通字典。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多