使用ExpandoObject创建运行时属性是否可行?

6

通常情况下,我们可以像这样创建属性:

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;

无论如何实现这种行为。

可能是向ExpandoObject添加在设计时未知的属性的重复问题。 - stijn
1个回答

20

直接使用它实现了 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<string, object>


感谢您的建议。我有AdomdDataReader对象。由于没有网格控件支持将AdomdData对象绑定为ItemsSource,因此我想从ADR生成更轻的可枚举源。为此,我正在研究动态语言,因为大多数网格控件都支持动态绑定。再次感谢。 - Prince Ashitaka
+1,特别是指出在这种情况下使用ExpandoObject可能很愚蠢。目前正在重构我的代码,改用普通的Dictionary。 :) - Per Lundberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接