web-dev-qa-db-ja.com

文字列と同じ名前でExpandoObjectにプロパティを追加します

文字列値と同じ名前のプロパティをExpandoObjectに追加する方法はありますか?

たとえば、私が持っている場合:

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

次のようにプロパティProductNumberを作成できます。

obj.ProductNumber = 123;

しかし、プロパティを作成できますかobj.ProductNumber文字列に基づくpropName?そのため、プロパティの名前が高度にわからない場合は、この入力に基づいて作成できます。 ExpandoObjectでこれが不可能な場合、C#の他の領域を調べる必要がありますか?

28
Paul

ExpandoObjectはIDictionary<string, object>を実装します。

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

dynamic参照を使用して(つまり、キャストなしで)インデクサー構文を使用できるかどうかは頭からわかりませんが、試してみて調べることはできます。

41
phoog

これを行うには、ExpandoObjectIDictionary<string,object>にキャストします。

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