dynamically - expandoobject c# example
¿Por qué no puedo indexar en un ExpandoObject? (1)
cómo Expando fue capaz de ocultar el método de una de sus interfaces.
Debido a que, como descubrió correctamente en la documentación, el indizador es una implementación de interfaz explícita . Del tutorial explícito de implementación de interfaz :
Una clase que implementa una interfaz puede implementar explícitamente un miembro de esa interfaz. Cuando un miembro se implementa explícitamente, no se puede acceder a él a través de una instancia de clase, sino solo a través de una instancia de la interfaz.
Esto significa que tendrás que convertir la referencia a la interfaz para acceder a ella:
((IDictionary<String, Object>)expando)["name"]
Algo me sorprendió al analizar la dinámica de C # hoy (nunca los he usado mucho, pero últimamente he estado experimentando con el marco web de Nancy). Descubrí que no podía hacer esto:
dynamic expando = new ExpandoObject();
expando.name = "John";
Console.WriteLine(expando["name"]);
La última línea lanza una excepción:
No se puede aplicar la indexación con [] a una expresión de tipo ''System.Dynamic.ExpandoObject''
Entiendo el mensaje de error, pero no entiendo por qué sucede esto. He consultado la documentación de ExpandoObject y se implementa explícitamente IDictionary<,>
y, por lo tanto, tiene un método this.[index]
( MSDN ). ¿Por qué no puedo llamarlo?
Por supuesto, no hay nada que me ExpandoObject
el ExpandoObject
a un diccionario manualmente y luego ExpandoObject
, pero eso desafía el punto; Tampoco explica cómo Expando pudo ocultar el método de una de sus interfaces.
¿Que está pasando aqui?