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

1

6

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.

Shanika answered 15/3, 2011 at 11:7 Comment(1)
possible duplicate of Adding unknown (at design time) properties to an ExpandoObjectHydrometeor
Y
20

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.

Yasmeen answered 15/3, 2011 at 11:9 Comment(2)
Thanks for suggestion. I have AdomdDataReader object. Since, no Grid controls support AdomdData objects to be bound as ItemsSource, I would like to generate a lighter enumerable source from the ADR. For that I was looking into dynamics, since most of the grid controls supports dynamic binding. Thanks again.Shanika
+1, especially for pointing out that it may be stupid to use ExpandoObject in this case. Currently refactoring my code to use a plain Dictionary instead. :)Bibliography

© 2022 - 2024 — McMap. All rights reserved.