192 votes

Comment créer son propre type dynamique ou objet dynamique en C# ?

Il y a, par exemple, le ViewBag propriété de ControllerBase et nous pouvons obtenir/définir dynamiquement des valeurs et ajouter un nombre quelconque de champs ou de propriétés supplémentaires à cet objet, ce qui est cool. Je veux utiliser quelque chose comme ça, au delà de l'application MVC et Controller dans d'autres types d'applications. Lorsque j'ai essayé de créer dynamique et définir sa propriété comme ceci :

1. dynamic MyDynamic = new { A="a" };
2. MyDynamic.A = "asd";
3. Console.WriteLine(MyDynamic.A);

J'ai RuntimeBinderException avec message La propriété ou l'indexeur '<>f__AnonymousType0.A' ne peut pas être assigné à -- il est en lecture seule. dans la ligne 2. De plus, je pense que ce n'est pas tout à fait ce que je recherche. Peut-être existe-t-il une classe qui me permette de faire quelque chose comme :

??? MyDynamic = new ???();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = DateTime.Now;
MyDynamic.TheAnswerToLifeTheUniverseAndEverything = 42;

avec l'ajout et le réglage dynamiques de propriétés.

15voto

Vous pouvez utiliser ExpandoObject Class qui se trouve dans System.Dynamic l'espace de noms.

dynamic MyDynamic = new ExpandoObject();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = "C";
MyDynamic.SomeProperty = SomeValue
MyDynamic.number = 10;
MyDynamic.Increment = (Action)(() => { MyDynamic.number++; });

Pour plus d'informations, voir ExpandoObject MSDN

7voto

Davecz Points 544
dynamic MyDynamic = new ExpandoObject();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X