33

Is there a way to add a property to an ExpandoObject with the same name as a string value?

For example, if I have:

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

I can create the property ProductNumber like:

obj.ProductNumber = 123;

But, can I create the property obj.ProductNumber based on the string propName? So, if I don't know what the name of the property will be in advanced, I can create it based on this input. If this is not possible with ExpandoObject, any other areas of C# I should look into?

2

2 Answers 2

44

ExpandoObject implements IDictionary<string, object>:

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

I don't know off the top of my head whether you can use the indexer syntax with a dynamic reference (i.e., without the cast), but you can certainly try it and find out.

Sign up to request clarification or add additional context in comments.

5 Comments

you can't index an ExpandoObject as you've done in your first example
Second example is good. First example gives Cannot apply indexing with [] to an expression of type 'System.Dynamic.ExpandoObject'
@Paul thanks -- I had forgotten that the indexer is an explicit interface implementation. Answer edited.
@VBRonPaulFan yes, I had forgotten that the interface implementation is explicit. I've edited the answer.
man, i am so glad i found this post. i was about to implement some object off of DynamicObject from some other tutorials just to get this ability. life and time saver thanks!! :D
21

Cast the ExpandoObject to an IDictionary<string,object> to do this:

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

1 Comment

+1 for at least mentioning that ExpandoObject is IDictionary<string,object> underneath. See docs

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.