10
votes

Définir dynamiquement le nom de la propriété d'un type anonyme C #

Y a-t-il un moyen de définir dynamiquement le nom de la propriété d'un type anonyme?

Normalement, nous ferions comme ceci: xxx

maintenant je voudrais maintenant je voudrais Définissez le nom (ou l'identifiant) de la propriété de manière dynamique, de sorte que ce nom peut provenir d'un fichier XML ou d'une base de données.


Merci de vos réponses. Non, mon besoin ne vaut certainement pas toutes les alternatives fastidieuses. Je voulais juste que mon code soit conforme à une bibliothèque existante développée par mon chef d'équipe. Mais nous avons décidé de mettre à jour la bibliothèque pour soutenir les types de dictionnaires afin qu'il puisse être facilement résolu.

Pete, je suis vraiment excité d'en savoir plus sur les types dynamiques de .NET 4.0

Merci .


1 commentaires

Pour les versions C # récentes voir: Stackoverflow.com / Questions / 3740021 / ...


6 Réponses :


2
votes

Pas sans une quantité massive de réflexion, probablement moreso que vous n'êtes intéressé à tirer parti de ce que vous faites. Peut-être devriez-vous examiner à la place à l'aide d'un dictionnaire, avec la valeur clé étant le nom de la propriété.


0 commentaires

0
votes

Le compilateur doit connaître le nom de la propriété, sinon il ne peut pas créer le type anonyme pour vous.

Donc, non, ce n'est pas possible, à moins que le nom de propriété réel soit connu au moment de la compilation (à travers une magie générée par VS avec la base de données ou quelque chose).


0 commentaires

4
votes

Ce n'est pas possible car même si le type est anonyme, ce n'est pas un type dynamique. Il s'agit toujours d'un type statique et des propriétés à ce sujet doivent être connues au moment de la compilation.

Vous voudrez peut-être consulter le mot-clé .NET 4.0 "dynamique" pour générer de vraies classes dynamiques.


0 commentaires

0
votes

Les propriétés dynamiques peuvent être effectuées avec Compilation du code de l'exécution mais ce serait Soyez surkill pour vos besoins, je suppose ...


0 commentaires

0
votes

Nope. Vous voulez créer une structure statique à partir d'informations dynamiques. Ne marchera pas, pensez-y. Utilisez un dictionnaire pour votre cas.


0 commentaires

1
votes

Comme cela a été mentionné, vous ne pouvez pas modifier le nom de la propriété; Comment voudriez-vous coder contre elle, par exemple? Toutefois, si cela est pour la liaison de données, vous pouvez faire des astuces pour plier le nom d'affichage des propriétés à l'exécution - par exemple iCustomTypeScriptor / typedescriptionProvider (et un (et un PropriétéDescriptor ).

beaucoup de travail; Il aurait besoin de vraiment en vaut la peine ...

Une autre option est un attribut personnalisé: xxx


0 commentaires