Maison >développement back-end >C++ >Comment extraire des constantes d'un type à l'aide de la réflexion C# ?

Comment extraire des constantes d'un type à l'aide de la réflexion C# ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-05 19:43:44395parcourir

How to Extract Constants from a Type Using C# Reflection?

Comment extraire des constantes de n'importe quel type à l'aide de Reflection

Reflection fournit un moyen puissant d'inspecter les types au moment de l'exécution. Cela vous permet de récupérer des informations sur les propriétés, les méthodes et même ses constantes d'un type.

Pour obtenir toutes les constantes d'un type à l'aide de la réflexion, vous pouvez utiliser la méthode GetFields avec des indicateurs de liaison spécifiques :

BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy

Ces indicateurs garantissent que vous récupérez tous les champs publics statiques déclarés au type actuel ou à l'un de ses types de base.

Après avoir récupéré le tableau d'objets FieldInfo, vous pouvez les filtrer pour inclure uniquement des constantes en vérifiant les indicateurs IsLiteral et IsInitOnly :

if(fi.IsLiteral && !fi.IsInitOnly)

L'indicateur IsLiteral indique que la valeur du champ est attribuée au moment de la compilation, tandis que l'indicateur IsInitOnly indique que le champ ne peut être initialisé que dans le constructeur. Pour les constantes, ces deux indicateurs doivent être vrais.

En utilisant cette approche, vous pouvez extraire efficacement toutes les constantes de n'importe quel type en utilisant la réflexion :

private List<FieldInfo> GetConstants(Type type)
{
    return type.GetFields(BindingFlags.Public | BindingFlags.Static |
            BindingFlags.FlattenHierarchy)
        .Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList();
}

Cette méthode renvoie une liste d'objets FieldInfo qui représentent les constantes déclarées dans le type spécifié.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn