Comment puis-je obtenir toutes les constantes de tout type en utilisant la réflexion?
c#
.net
reflection
constants
masoud ramezani
la source
la source
Réponses:
Bien que ce soit un ancien code:
La source
Vous pouvez facilement le convertir en code plus propre à l'aide de génériques et de LINQ:
Ou avec une ligne:
la source
IsLiteral
ditif its value is written at compile time
et cela n'est vrai que pour les constantes, c'est ainsi qu'il se comporte maintenant (testé à partir de .NET 4.5.2)Si vous souhaitez obtenir les valeurs de toutes les constantes d'un type spécifique, à partir du type cible, voici une méthode d'extension (étendant certaines des réponses de cette page):
Alors pour une classe comme celle-ci
Vous pouvez obtenir les
string
valeurs constantes comme ceci:la source
.Where(fi => fi.IsLiteral && !fi.IsInitOnly).Select(x => x.GetRawConstantValue()).OfType<T>().ToList();
:?En tant qu'extensions de type:
la source
IEnumerable<T>
au lieu d'unIList
?Utilisez
property.GetConstantValue()
pour obtenir de la valeur.la source
GetRawConstantValue()