Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to use ExpandoObject to create run-time properties?

Normally, we can create properties like this,

dynamic expando = new ExpandoObject();
expando.Price = 45k;
expando.Value = "Good";

In my case, I won't know the properties such as "Price" or "Value" until runtime. How, can I create such dynamic properties. Something like,

dynamic expando = new ExpandoObject();
expando[properties[0]] = 45k;
expando[properties[1]] = "Good";
expando[properties[2]] = "Red";
expando[properties[3]] = 8;

Anyway to achieve this kind of behavior.

like image 735
Prince Ashitaka Avatar asked Mar 15 '11 11:03

Prince Ashitaka


1 Answers

Just use the fact that it implements 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

On the other hand, if you don't know the properties until execution time, what's actually going to consume them? It may still make sense to use ExpandoObject - but equally it may make sense to use Dictionary<string, object> to start with.

like image 76
Jon Skeet Avatar answered Nov 02 '22 23:11

Jon Skeet