C#のGetEnumValues()メソッドで列挙型の定数値の配列を取得する方法
C#では、Type.GetEnumValues()メソッドを使用することで、現在の列挙型(enum)に含まれる定数の値の配列を取得できます。この記事では、実際のコード例を通じて、その使い方と動作をわかりやすく解説します。
GetEnumValues()メソッドとは
GetEnumValues()は、指定した型が列挙型である場合に、その定数値を格納した配列(Array)を返すメソッドです。ただし、対象の型が列挙型ではない場合にはArgumentException例外がスローされるため、注意が必要です。
例1:列挙型以外の型を指定した場合
まず、列挙型ではないint型に対してこのメソッドを呼び出した場合の動作を見てみましょう。
using System;
public class Demo {
enum Vehicle {Car, Bus, Bike, Airplane}
public static void Main() {
try {
Type type = typeof(int);
string[] str = type.GetEnumNames();
Console.WriteLine("GetEnumNames() to return the constant name = " + str);
Type type2 = type.GetEnumUnderlyingType();
Console.Write("Enum Underlying type = "+type2);
Array arrObj = type.GetEnumValues();
Console.Write("Values = {0}"+arrObj);
Console.WriteLine("\nListing constants ..");
for (int i = 0; i < str.Length; i++)
Console.Write("{0} ", str[i]);
}
catch (ArgumentException e) {
Console.WriteLine("Not an enum!");
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
実行結果
Not an enum! System.ArgumentException
int型は列挙型ではないため、ArgumentException例外が発生し、catchブロック内の「Not an enum!」というメッセージが出力されます。
例2:正しい列挙型を指定した場合
次に、独自に定義したVehicle列挙型に対してメソッドを呼び出した場合の例です。
using System;
public class Demo {
enum Vehicle {Car, Bus, Bike, Airplane}
public static void Main() {
try {
Vehicle v = Vehicle.Bike;
Type type = v.GetType();
string[] str = type.GetEnumNames();
Console.WriteLine("GetEnumName() to return the constant name = " + str);
Type type2 = type.GetEnumUnderlyingType();
Console.Write("Enum Underlying type = "+type2);
Array arrObj = type.GetEnumValues();
Console.Write("Values = "+arrObj);
Console.WriteLine("\nListing constants ..");
for (int i = 0; i < str.Length; i++)
Console.Write("{0} ", str[i]);
}
catch (ArgumentException e) {
Console.WriteLine("Not an enum!");
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
実行結果
GetEnumName() to return the constant name = System.String[] Enum Underlying type = System.Int32Values = Demo+Vehicle[] Listing constants .. Car Bus Bike Airplane
コードのポイント解説
- GetEnumNames():列挙型に含まれる定数名を文字列配列(
string[])として返します。 - GetEnumUnderlyingType():列挙型の基になる型を返します。明示的に指定しない限り、C#の列挙型は既定で
System.Int32(int型)を基盤とします。 - GetEnumValues():列挙型のすべての定数値を格納した配列を返します。今回の例では
Demo+Vehicle[]型の配列が取得されています。
このように、まずGetType()メソッドで列挙値から型情報を取得し、その型オブジェクトに対してGetEnumValues()を呼び出すことで、列挙型の定数値の配列を簡単に取得できます。列挙型以外の型を渡した場合は例外がスローされるため、try-catchによる適切な例外処理を組み合わせると安全です。
-
C#のStringDictionaryで値のコレクションを取得する方法
C#のStringDictionaryから値のコレクションを取得するには、Keysプロパティで全キーを配列にコピーし、そのキーを使って各値へアクセスします。StringDictionaryは、キーと値がどちらも文字列型として扱われる特殊なディクショナリで、System.Collections.Specialized名前空間に属しています。 値のコレクションを取得する基本手順 Countプロパティで要素数を取得し、同じサイズのString型配列を用意します Keys.CopyTo()メソッドで、すべてのキーを配列の先頭(インデックス0)からコピーします コピーしたキーをインデクサ(strDic
-
C#のジャグ配列の要素の型とは?参照型としてnullで初期化される仕組みを解説
C#におけるジャグ配列(Jagged Array)とは、「配列の配列」のことです。そのため、ジャグ配列の各要素は参照型であり、宣言した直後の状態では null に初期化されるという特徴があります。つまり、ジャグ配列自体は1つの配列ですが、その各要素がさらに別の配列への参照を保持する構造になっています。この性質により、内側の配列ごとに異なる長さを持たせることができるのが大きなメリットです。ジャグ配列の宣言方法まず、ジャグ配列を宣言します。以下のように、角括弧を2つ重ねて記述します。int[][] marks;ジャグ配列の初期化方法次に、宣言したジャグ配列を初期化します。ここでは、5つの整数型配列