列挙値に対応した任意の文字列を取得する
C#のEnum型の列挙値から文字列を取得する方法を紹介します。
例えば以下の様なEnumを定義したとします。
1 2 3 4 5 6 7 8 9 |
public enum Machine: int { // メインPC MainPc = 0, // サブPC SubPc, // サーバー Server } |
このEnumから任意の文字列(例えばIPアドレスや名称など)を取得したい事ってありませんか?
そんな時は、以下のようにEnumから特定の値を取得する静的拡張クラスを定義します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public static class MachineEx { public static string GetgMachineAddress(this Machine machine) { switch(machine) { case Machine.MainPc: return "192.168.1.20"; case Machine.SubPc: return "192.168.1.30"; case Machine.Server: return "192.168.1.10"; default: throw new ArgumentException(nameof(machine)); } } } |
1 |
Machine.MainPc.GetMachineAddress(); // "192.168.1.20" |
このパターンは実際の開発でもよく使用します。(弊社だけかもしれませんが(笑))
Enumの定義と値取得用の拡張クラスをまとめて1つのファイル(例でいうとMachine.cs)にしてCategoriesなんてフォルダにまとめたり。
また、今回の例では文字列を取得していますが、戻り値を変えれば数値でもユーザー定義型でも取得可能です。
簡単でわかりやすいのでオススメです。
よかったら参考にどうぞ!
コメント