Something caught me by surprise when looking into C# dynamics today (I've never used them much, but lately I've been experimenting with the Nancy web framework). I found that I couldn't do this:
dynamic expando = new ExpandoObject();
expando.name = "John";
Console.WriteLine(expando["name"]);
The last line throws an exception:
Cannot apply indexing with [] to an expression of type 'System.Dynamic.ExpandoObject'
I understand the error message, but I don't understand why this is happening. I have looked at the documentation for ExpandoObject and it explicitly implements IDictionary<,>
and thus has a this.[index]
method (MSDN). Why can't I call it?
Of course, there's nothing to stop me from downcasting the ExpandoObject
to a dictionary manually and then indexing into it, but that kind of defies the point; it also doesn't explain how the Expando was able to hide the method of one of its interfaces.
What's going on here?