.NET Core(C#): enumで文字列を保持

はじめに

サンプル

カスタムの属性を定義し、列挙体の各値に表示名・文字列値を設定できるるようにするサンプルです。設定した表示値・文字列値は列挙体の拡張メソッドで取得できるようにします。
実際の業務利用では、Excel等で表示名や文字列値を含むコード一覧を定義し、Excelマクロで属性値を付与した列挙体のソースコードを出力するような使い方になると考えています。

列挙体への付加情報の定義

EnumInfo属性(EnumInfoAttribute)を定義し、列挙体値の表示名・文字列値を指定できるようにします。

Enum拡張メソッドの定義

各列挙体値に設定された表示名・文字列をディクショナリにキャッシュし、列挙体の拡張メソッドで取得できるようにします。

  • 静的コンストラクタを使用して、EnumExtensionExampleクラスロード時に纏めて表示名・文字列値をディクショナリにキャッシュしています。
  • 表示名・文字列値の取得が実行された際に属性値からそれぞれの値を取得する方法も考えられますが、都度属性値を取得するより、ディクショナリにキャッシュした値を取得した方が性能が良いだろう、という考えに基づいています。
  • Assembly.GetTypes()を使用してこのサンプル(アセンブリ)に含まれる全ての列挙体を取得しています。
  • キャッシュに使用しているDictionary<,>は書込みを行わなければスレッドセーフです。詳細はリファレンスをご覧ください。

動作確認