2010-11-18 14 views
13

El siguiente código me parece razonable. Debería crear el objeto y luego usar las características dinámicas para permitirme asignar cualquier propiedad que me guste. Sin embargo, el compilador dice que "ExpandoObject no contiene una definición para Test". A lo que le digo: "¡Lo sé, ese es el maldito punto!"El inicializador de objeto dinámico C# no compilará

dynamic example = new ExpandoObject 
{ 
    Test = "fail" 
}; 

Cualquier idea de por qué csc no permite esto.

La alternativa es expandir manualmente el código en asignaciones de propiedades individuales.

dynamic example = new ExpandoObject(); 
example.Test = "fail"; 

Lo que es molesto cuando tengo muchas propiedades para asignar.

+2

Por favor, vote esta característica en Visual Studio [UserVoice] (https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/7062098-support-object-initializers-on-expandoobjects). – orad

Respuesta

13

Dentro del inicializador de objetos, el tipo es ExpandoObject, no dynamic, por lo que no obtiene funcionalidad dinámica. Después del el inicializador, usted está operando en una variable de tipo dynamic y por lo tanto la funcionalidad dinámica es disponible allí.

+0

Ah, sí, eso tiene sentido. El inicializador de objetos _expression_ no está escrito como dinámico. –

6

En su primer ejemplo, el compilador de C# buscará una propiedad denominada Test en ExpandoObject. No existe.

En su segundo ejemplo, el compilador buscará una propiedad de prueba en un objeto dinámico. Esto está permitido, entonces compila.

Cuestiones relacionadas