enum(列挙型)の値と名前を取得する(GetValues/GetNames)[C#]

enum列挙型フィールドナンバー

今回は、enum(列挙型)のフィールドの値と名前を取得についてです。

enum(列挙型)とは、複数のフィールド(変数)をひとつにまとめて、一連の整数値を付けることができる型のことです。
enum(列挙型)で定義されるフィールド(変数)は、メンバーや列挙子(リスト)などと呼ばれます。

enum(列挙型)は、ユーザー(開発者)が独自に定義することができます。
また、System名前空間にあるDayOfWeek列挙型などのように、.NETにあらかじめ用意されているものもあります。

enum(列挙型)のフィールドにはデフォルトで、定義された順に0(ゼロ)から整数値(int型の値)が付けられます。

フィールド名
None 0
primary 1
secondary 2
tertiary 3
quaternary 4
quinary 5
senary 6
septenary 7
octonary 8
novenary 9
decenary 10

最初の値を0(ゼロ)以外で定義することも可能です。

フィールド名
January 1
February 2
March 3
April 4
May 5
June 6
July 7
August 8
September 9
October 10
November 11
December 12

また、途中のフィールドから付けられる整数値を変えることもできます。

フィールド名
Primary 0
Info 10
Success 11
Warning 20
Danger 21

すべてフィールドの値を指定してenumを定義することもできます。

上記の通り、enumに定義されているフィールドは、名前と値を持っています。

本記事では、C#でenum(列挙型)で定義されているフィールドの値または名前を列挙して、一覧を取得する方法を紹介します。

enum(列挙型)の値を列挙する

enumのフィールドの値(列挙子の値)を列挙する際は、System名前空間にあるEnumクラスのGetValues静的メソッドを使用します。

GetValues静的メソッドはパラメーター(引数)に値を取得するenumの型(Type)を取ります。

上記の例では、DayOfWeek列挙型の値を列挙してコンソールに出力しています。
GetValuesメソッドはArray型の値を返しますので、取得したArray型の値をforeachで列挙して、フィールドの値を取得しています。

enum(列挙型)の値から名前を取得する

enum(列挙型)のフィールドの値から名前を取得する方法は、2種類あります。
1つ目はフィールドの値をToStringメソッドで文字列に変換する方法です。

2つ目の方法は、Enum.GetName静的メソッドを使用するやり方です。
DayOfWeek列挙型を使用した例をもとに、フィールドの値から名前を取得すると、上記のようになります。

GetName静的メソッドにはパラメーター(引数)に名前を取得するenumの型(Type)と値を指定します。

enum(列挙型)の名前を列挙する

enumのフィールドの値(列挙子の値)を列挙する際は、Enum.GetValues静的メソッドを使用しましたが、enumのフィールドの名前(列挙子の名前)も値と同じように取得できます。
enumのフィールド名を取得するには、Enum.GetNames静的メソッドを使用します。

GetNames静的メソッドもGetValues静的メソッドと同様に、パラメーター(引数)に名前を取得するenumの型(Type)を取ります。
値を列挙した場合と同様にDayOfWeek列挙型を使用した例を示します。

enum(列挙型)についての補足

C#では、enum(列挙型)はデフォルトではint型の整数として扱われます。
しかし、enum(列挙型)のフィールド値がint型の範囲を超えてしまう場合や、int型程の値の範囲が必要ない場合などは、enum(列挙型)の型を指定することができます。
以下にlong型を指定したenum(列挙型)の指定例を示します。

上記の例ではlong型を指定しましたが、enum(列挙型)には、byte、sbyte、short、ushort、int、uint、long、ulongを指定することができます。