今回は、enum(列挙型)のフィールドの値と名前を取得についてです。
enum(列挙型)とは、複数のフィールド(変数)をひとつにまとめて、一連の整数値を付けることができる型のことです。
enum(列挙型)で定義されるフィールド(変数)は、メンバーや列挙子(リスト)などと呼ばれます。
enum(列挙型)は、ユーザー(開発者)が独自に定義することができます。
また、System名前空間にあるDayOfWeek列挙型などのように、.NETにあらかじめ用意されているものもあります。
enum(列挙型)のフィールドにはデフォルトで、定義された順に0(ゼロ)から整数値(int型の値)が付けられます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// ユーザー定義enum型の例 public enum OrderNumbers { // 0 None, // 1(first) Primary, // 2(second) Secondary, // 3(third) Tertiary, // 4(fourth) Quaternary, // 5(fifth) Quinary, // 6(sixth) Senary, // 7(seventh) Septenary, // 8(eighth) Octonary, // 9(ninth) Novenary, // 10(tenth) Decenary } |
フィールド名 | 値 |
---|---|
None | 0 |
primary | 1 |
secondary | 2 |
tertiary | 3 |
quaternary | 4 |
quinary | 5 |
senary | 6 |
septenary | 7 |
octonary | 8 |
novenary | 9 |
decenary | 10 |
最初の値を0(ゼロ)以外で定義することも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
// 開始値に1を指定したenum型 public enum Month { // 1月(Jan.) January = 1, // 2月(Feb.) February, // 3月(Mar.) March, // 4月(Apr.) April, // 5月(May.) May, // 6月(Jun.) June, // 7月(Jul.) July, // 8月(Aug.) August, // 9月(Sep.) September, // 10月(Oct.) October, // 11月(Nov.) November, // 12月(Dec.) December } |
フィールド名 | 値 |
---|---|
January | 1 |
February | 2 |
March | 3 |
April | 4 |
May | 5 |
June | 6 |
July | 7 |
August | 8 |
September | 9 |
October | 10 |
November | 11 |
December | 12 |
また、途中のフィールドから付けられる整数値を変えることもできます。
1 2 3 4 5 6 7 8 9 |
// 途中から値を指定したenum型 public enum ColorType { Primary, Info = 10, Success, Warning = 20, Danger } |
フィールド名 | 値 |
---|---|
Primary | 0 |
Info | 10 |
Success | 11 |
Warning | 20 |
Danger | 21 |
すべてフィールドの値を指定してenumを定義することもできます。
1 2 3 4 5 6 7 8 |
// すべての値を指定したenum型 public enum MessageType : long { Error = 1, Warning = 2, Question = 4, Information = 8, } |
上記の通り、enumに定義されているフィールドは、名前と値を持っています。
本記事では、C#でenum(列挙型)で定義されているフィールドの値または名前を列挙して、一覧を取得する方法を紹介します。
enum(列挙型)の値を列挙する
enumのフィールドの値(列挙子の値)を列挙する際は、System名前空間にあるEnumクラスのGetValues静的メソッドを使用します。
1 2 |
[System.Runtime.InteropServices.ComVisible(true)] public static Array GetValues (Type enumType); |
GetValues静的メソッドはパラメーター(引数)に値を取得するenumの型(Type)を取ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// 値を列挙してコンソールに出力する Array dayOfWeekValues = Enum.GetValues(typeof(DayOfWeek)); foreach (object value in dayOfWeekValues) { // フィールドのオブジェクトと数値(int)に変換した値を出力 Console.WriteLine($"value: {value}, intValue: {(int)value}"); } /* value: Sunday, intValue: 0 value: Monday, intValue: 1 value: Tuesday, intValue: 2 value: Wednesday, intValue: 3 value: Thursday, intValue: 4 value: Friday, intValue: 5 value: Saturday, intValue: 6 */ |
上記の例では、DayOfWeek列挙型の値を列挙してコンソールに出力しています。
GetValuesメソッドはArray型の値を返しますので、取得したArray型の値をforeachで列挙して、フィールドの値を取得しています。
enum(列挙型)の値から名前を取得する
enum(列挙型)のフィールドの値から名前を取得する方法は、2種類あります。
1つ目はフィールドの値をToStringメソッドで文字列に変換する方法です。
1 |
string name = value.ToString(); |
2つ目の方法は、Enum.GetName静的メソッドを使用するやり方です。
DayOfWeek列挙型を使用した例をもとに、フィールドの値から名前を取得すると、上記のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Array dayOfWeekValues = Enum.GetValues(typeof(DayOfWeek)); foreach (object value in dayOfWeekValues) { // GetNameメソッドでフィールドの値から名前を取得 string name = Enum.GetName(typeof(DayOfWeek), value); Console.WriteLine(name); } /* Sunday Monday Tuesday Wednesday Thursday Friday Saturday */ |
GetName静的メソッドにはパラメーター(引数)に名前を取得するenumの型(Type)と値を指定します。
enum(列挙型)の名前を列挙する
enumのフィールドの値(列挙子の値)を列挙する際は、Enum.GetValues静的メソッドを使用しましたが、enumのフィールドの名前(列挙子の名前)も値と同じように取得できます。
enumのフィールド名を取得するには、Enum.GetNames静的メソッドを使用します。
1 2 |
[System.Runtime.InteropServices.ComVisible(true)] public static string[] GetNames (Type enumType); |
GetNames静的メソッドもGetValues静的メソッドと同様に、パラメーター(引数)に名前を取得するenumの型(Type)を取ります。
値を列挙した場合と同様にDayOfWeek列挙型を使用した例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// string[] dayOfWeekNames = Enum.GetNames(typeof(DayOfWeek)); foreach (string name in dayOfWeekNames) { Console.WriteLine(name); } /* Sunday Monday Tuesday Wednesday Thursday Friday Saturday */ |
enum(列挙型)についての補足
C#では、enum(列挙型)はデフォルトではint型の整数として扱われます。
しかし、enum(列挙型)のフィールド値がint型の範囲を超えてしまう場合や、int型程の値の範囲が必要ない場合などは、enum(列挙型)の型を指定することができます。
以下にlong型を指定したenum(列挙型)の指定例を示します。
1 2 3 4 5 6 |
public enum BigValues Member1 = 11111111111, Menber2 = 22222222222, Menber3 = 33333333333, Menber4 = 44444444444, Menber5 = 55555555555 |
上記の例ではlong型を指定しましたが、enum(列挙型)には、byte、sbyte、short、ushort、int、uint、long、ulongを指定することができます。