Heim >Backend-Entwicklung >C++ >Wie extrahiere ich mithilfe von C#-Reflexion Konstanten aus einem Typ?

Wie extrahiere ich mithilfe von C#-Reflexion Konstanten aus einem Typ?

Linda Hamilton
Linda HamiltonOriginal
2025-01-05 19:43:44395Durchsuche

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

So extrahieren Sie Konstanten aus jedem Typ mithilfe von Reflection

Reflection bietet eine leistungsstarke Möglichkeit, Typen zur Laufzeit zu überprüfen. Dadurch können Sie Informationen über die Eigenschaften, Methoden und sogar seine Konstanten eines Typs abrufen.

Um alle Konstanten eines Typs mithilfe von Reflektion abzurufen, können Sie die GetFields-Methode mit bestimmten Bindungsflags verwenden:

BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy

Diese Flags stellen sicher, dass Sie alle öffentlichen, statischen Felder abrufen, die beim aktuellen Typ oder einem seiner Basistypen deklariert sind.

Nachher Beim Abrufen des Arrays von FieldInfo-Objekten können Sie diese so filtern, dass sie nur Konstanten enthalten, indem Sie die Flags IsLiteral und IsInitOnly überprüfen:

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

Das Flag IsLiteral zeigt an, dass der Wert des Felds zur Kompilierungszeit zugewiesen wird, während das Flag IsInitOnly gibt an, dass das Feld nur im Konstruktor initialisiert werden kann. Für Konstanten sollten beide Flags wahr sein.

Mit diesem Ansatz können Sie mithilfe von Reflektion effizient alle Konstanten aus jedem Typ extrahieren:

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

Diese Methode gibt eine Liste von FieldInfo-Objekten zurück, die stellen die innerhalb des angegebenen Typs deklarierten Konstanten dar.

Das obige ist der detaillierte Inhalt vonWie extrahiere ich mithilfe von C#-Reflexion Konstanten aus einem Typ?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn