首頁 >後端開發 >C++ >如何使用 C# 反射從型別中提取常數?

如何使用 C# 反射從型別中提取常數?

Linda Hamilton
Linda Hamilton原創
2025-01-05 19:43:44420瀏覽

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

如何使用反射從任何類型中提取常數

反射提供了一種在運行時檢查類型的強大方法。這允許您檢索有關類型的屬性、方法甚至常數的信息。

要使用反射獲取類型的所有常數,您可以使用具有特定綁定標誌的GetFields 方法:

BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy

這些標誌確保您檢索在當前類型或其任何基類型中聲明的所有公共靜態欄位。

之後檢索FieldInfo 物件的數組,您可以透過檢查IsLiteral 和IsInitOnly 標誌來過濾它們以僅包含常數:

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

IsLiteral 標誌表示欄位的值是在編譯時分配的,而IsInitOnly 標誌表示欄位的值是在編譯時指派的表示該欄位只能在建構函式中初始化。對於常數,這兩個標誌都應該為 true。

使用這種方法,您可以使用反射有效地從任何類型中提取所有常數:

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

此方法傳回FieldInfo 物件的列表,這些物件表示在指定類型中聲明的常量。

以上是如何使用 C# 反射從型別中提取常數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn