将属性添加到ExpandoObject,其名称与字符串相同

时间:2012-04-06 19:44:33

标签: c# dynamic expandoobject

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

例如,如果我有:

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

我可以创建属性ProductNumber,如:

obj.ProductNumber = 123;

但是,我可以根据字符串obj.ProductNumber创建属性propName吗?所以,如果我不知道该属性的名称将是什么,我可以根据此输入创建它。如果使用ExpandoObject无法实现这一点,那么C#的其他任何领域都应该进行研究?

2 个答案:

答案 0 :(得分:40)

ExpandoObject实现IDictionary<string, object>

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

我不知道你是否可以使用带有dynamic引用的索引器语法(即没有强制转换),但你可以尝试并找出它。

答案 1 :(得分:14)

ExpandoObject投射到IDictionary<string,object>以执行此操作:

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