2010-11-18 3 views
13

Le code suivant me semble raisonnable. Il devrait créer l'objet et ensuite utiliser les fonctionnalités dynamiques pour me laisser attribuer les propriétés que j'aime. Cependant le compilateur dit que "ExpandoObject ne contient pas de définition pour Test". Pour ce que je dis, "je sais, c'est le point de flipper!"L'initialisateur d'objet dynamique C# ne se compilera pas

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

Toutes les idées pour lesquelles csc ne le permet pas.

L'alternative consiste à étendre manuellement le code en affectations de propriétés individuelles.

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

Ce qui est gênant quand j'ai beaucoup de propriétés à assigner.

+2

Veuillez voter pour cette fonctionnalité dans Visual Studio [UserVoice] (https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/7062098-support-object-initializers-on-expandoobjects). – orad

Répondre

13

Dans l'initialiseur d'objet, le type est ExpandoObject, et non dynamic, donc vous n'obtenez pas de fonctionnalité dynamique. Après l'initialiseur, vous travaillez sur une variable de type dynamic et la fonctionnalité dynamique est disponible là.

+0

Ah, oui, c'est logique. L'initialiseur d'objet _expression_ n'est pas typé comme dynamique. –

6

Dans votre premier exemple, le compilateur C# recherchera une propriété nommée Test sur ExpandoObject. Cela n'existe pas.

Dans votre deuxième exemple, le compilateur recherchera une propriété Test sur un objet dynamique. Ceci est autorisé, donc il compile.

Questions connexes