Qualcosa mi ha colto di sorpresa quando ho esaminato la dinamica C# (non li ho mai usati molto, ma ultimamente ho sperimentato con il framework web di Nancy). Ho scoperto che non potevo fare questo:Perché non posso indicizzare in un ExpandoObject?
dynamic expando = new ExpandoObject();
expando.name = "John";
Console.WriteLine(expando["name"]);
L'ultima riga genera un'eccezione:
Impossibile applicare l'indicizzazione con [] per un'espressione di tipo 'System.Dynamic.ExpandoObject'
Ho capito il messaggio di errore, ma non capisco perché questo sta accadendo. Ho esaminato la documentazione di ExpandoObject e implementa esplicitamente IDictionary<,>
e quindi ha un metodo this.[index]
(MSDN). Perché non posso chiamarlo?
Naturalmente, non c'è niente che mi impedisca di downcasting il ExpandoObject
a un dizionario manualmente e quindi l'indicizzazione in esso, ma questo tipo di sfida al punto; inoltre non spiega come Expando sia stato in grado di nascondere il metodo di una delle sue interfacce.
Cosa sta succedendo qui?
implementazioni di interfacce esplicite sono accessibili solo se l'oggetto è gettato a tale interfaccia, non è qualcosa di particolare a ExpanoObject. –
Codice sorgente pertinente: http://referencesource.microsoft.com/#System.Core/Microsoft/Scripting/Actions/ExpandoObject.cs,552 –