リフレクションを使用して任意のデータ型の定数を取得する方法
興味深い質問は、実行時に特定のデータ型内に存在する定数を判断することです。 。リフレクションの原理を使用してこれを実現する方法を調べてみましょう。
リフレクションで定数の領域に飛び込む
定数を取得する謎を解明するために、リフレクション兵器庫が提供する大胆なメソッド。リフレクションを使用すると、型を精査して操作できるようになり、その型が持つ隠された宝石を引き出すことができます。
定数を明らかにするための模範的なガイド
この冒険に乗り出すには、特定の型のコアを掘り下げ、その不変部分を抽出する例示的なルーチンを提供します。 constants:
private FieldInfo[] GetConstants(System.Type type) { // Initialize an assembly of constants ArrayList constants = new ArrayList(); // Summon an army of field explorers to unearth all public, static gems FieldInfo[] fieldInfos = type.GetFields( // Command the retrieval of public and static fields BindingFlags.Public | BindingFlags.Static | // Extend the search to the depth of base types BindingFlags.FlattenHierarchy); // Patrol through the reconnaissance report, enlisting only the immutable constants foreach(FieldInfo fi in fieldInfos) // Assess if the field's value is immutable and endures from compile-time // Exclude any field that can be tampered with in the constructor if(fi.IsLiteral && !fi.IsInitOnly) constants.Add(fi); // Formulate an array of FieldInfos holding the unearthed constants return (FieldInfo[])constants.ToArray(typeof(FieldInfo)); }
洗練されたタッチのためのジェネリックスと LINQ の採用
前述のアプローチは、ジェネリックスの優雅さと LINQ のパワーによってさらに洗練されます。この変換により、よりクリーンで簡潔なコードベースが得られます。
private List<FieldInfo> GetConstants(Type type) { FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); return fieldInfos.Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList(); }
シンプルさのストローク
ミニマリズムを目指して、この洗練されたアプローチを簡潔なものに凝縮します。ライナー:
type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy) .Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList();
この兵器で武装するテクニックを活用すると、あらゆるデータ型の中心部に隠された秘密を明らかにできるようになります。
以上がリフレクションを使用して任意のデータ型の定数を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。