ホームページ > バックエンド開発 > C++ > C# でリフレクションを使用して型のすべての定数を取得するにはどうすればよいですか?

C# でリフレクションを使用して型のすべての定数を取得するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-03 19:38:41
オリジナル
358 人が閲覧しました

How Can I Retrieve All Constants of a Type Using Reflection in C#?

リフレクションを使用した型の定数の取得

指定された型内で宣言されたすべての定数を取得するには、リフレクションを使用できます。次の手法は、この問題の解決策を提供します。

従来のアプローチでは、GetFields() メソッドを使用してその型のフィールドを取得します。 IsLiteral プロパティと IsInitOnly プロパティに基づいて非定数フィールドをフィルターで除外することで、定数フィールドを分離できます。実装例を次に示します。

private FieldInfo[] GetConstants(System.Type type)
{
    ArrayList constants = new ArrayList();

    FieldInfo[] fieldInfos = type.GetFields(
        // Gets all public and static fields
        BindingFlags.Public | BindingFlags.Static | 
        // This tells it to get the fields from all base types as well
        BindingFlags.FlattenHierarchy);

    // Go through the list and only pick out the constants
    foreach(FieldInfo fi in fieldInfos)
        // IsLiteral determines if its value is written at 
        //   compile time and not changeable
        // IsInitOnly determines if the field can be set 
        //   in the body of the constructor
        // for C# a field which is readonly keyword would have both true 
        //   but a const field would have only IsLiteral equal to true
        if(fi.IsLiteral && !fi.IsInitOnly)
            constants.Add(fi);           

    // Return an array of FieldInfos
    return (FieldInfo[])constants.ToArray(typeof(FieldInfo));
}
ログイン後にコピー

より簡潔なソリューションには、ジェネリックスと LINQ を利用できます。

private List<FieldInfo> GetConstants(Type type)
{
    FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public |
         BindingFlags.Static | BindingFlags.FlattenHierarchy);

    return fieldInfos.Where(fi => fi.IsLiteral &amp;&amp; !fi.IsInitOnly).ToList();
}
ログイン後にコピー

このメソッドは、定数をフィルターで除外するためのクリーンで簡潔な方法を提供します。

または、1 行の解決策は次のとおりです。可能:

type.GetFields(BindingFlags.Public | BindingFlags.Static |
               BindingFlags.FlattenHierarchy)
    .Where(fi => fi.IsLiteral &amp;&amp; !fi.IsInitOnly).ToList();
ログイン後にコピー

このアプローチでは、すべてのフィルタリング操作が 1 つの式に結合されます。

以上がC# でリフレクションを使用して型のすべての定数を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート