Il y a par exemple la propriété ViewBag de la ControllerBase
classe et nous pouvons dynamiquement obtenir / définir des valeurs et ajouter un nombre illimité 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 de la Controller
classe dans d'autres types d'applications. Lorsque j'ai essayé de créer un objet dynamique et de définir sa propriété comme ci-dessous:
1. dynamic MyDynamic = new { A="a" };
2. MyDynamic.A = "asd";
3. Console.WriteLine(MyDynamic.A);
J'ai RuntimeBinderException
avec le message Property ou indexer '<> f__AnonymousType0.A' ne peut pas être affecté à - il est en lecture seule à la ligne 2. Aussi je suggère que ce n'est pas tout à fait ce que je recherche. Peut-être y a-t-il une classe qui peut me permettre de faire quelque chose comme:
??? MyDynamic = new ???();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = DateTime.Now;
MyDynamic.TheAnswerToLifeTheUniverseAndEverything = 42;
avec des propriétés d'ajout et de réglage dynamiques.
J'ai récemment eu besoin d'aller plus loin, qui consistait à rendre les ajouts de propriété dans l'objet dynamique, eux-mêmes dynamiques, en fonction des entrées définies par l'utilisateur. Les exemples ici et de la documentation ExpandoObject de Microsoft ne traitent pas spécifiquement de l'ajout de propriétés de manière dynamique, mais peuvent être supposés à partir de la façon dont vous énumérez et supprimez les propriétés. Quoi qu'il en soit, j'ai pensé que cela pourrait être utile à quelqu'un. Voici une version extrêmement simplifiée de la façon d'ajouter des propriétés vraiment dynamiques à un ExpandoObject (en ignorant les mots clés et autres manipulations):
la source
ExpandoObject
est ce que vous recherchez.la source
Vous pouvez utiliser
ExpandoObject Class
qui est dans l'System.Dynamic
espace de noms.Plus d'informations peuvent être trouvées sur ExpandoObject MSDN
la source
la source
la source
Ou la valeur est présente
la source