How can I use collection initializer syntax with ExpandoObject?

I've noticed that the new ExpandoObject implements IDictionary which has the requisite IEnumerable> and Add(string, object) methods and so it should be possible to use the collection initialiser syntax to add properties to the expando object in the same way as you add items to a dictionary.

Dictionary<string,object> dict = new Dictionary<string,object>() 
{
    { "Hello", "World" }
};

dynamic obj = new ExpandoObject()
{
    { "foo", "hello" },
    { "bar", 42 },
    { "baz", new object() }
};

int value = obj.bar;

But there doesn't seem to be a way of doing that. Error:

'System.Dynamic.ExpandoObject' does not contain a definition for 'Add'

I assume this doesn't work because the interface is implemented explicitly. but is there any way of getting around that? This works fine,

IDictionary<string, object> exdict = new ExpandoObject() as IDictionary<string, object>();
exdict.Add("foo", "hello");
exdict.Add("bar", 42);
exdict.Add("baz", new object());

but the collection initializer syntax is much neater.

15
задан jbtule 24 March 2018 в 20:15
поделиться