31

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

例如,如果我有:

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

我可以创建属性 ProductNumber,如:

obj.ProductNumber = 123;

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

4

2 回答 2

44

ExpandoObject 实现IDictionary<string, object>

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

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

于 2012-04-06T19:45:59.517 回答
18

投射ExpandoObject到一个IDictionary<string,object>来做到这一点:

string propName = "ProductNumber";
dynamic obj = new System.Dynamic.ExpandoObject();
var dict = (IDictionary<string,object>)obj;
dict[propName] = 123;
于 2012-04-06T19:46:41.073 回答