C#で列挙型のメンバー名を取得する方法|GetEnumNames()の使い方を解説
はじめに
C#では、Type.GetEnumNames()メソッドを使うことで、現在の列挙型(enum)に定義されているすべてのメンバー(定数)の名前をstring型の配列として取得できます。本記事では、具体的なサンプルコードと実行結果をもとに、このメソッドの基本的な使い方と注意点をわかりやすく解説します。
GetEnumNames()メソッドの基本
GetEnumNames()は、System名前空間のTypeクラスに属するメソッドです。対象の型が列挙型であれば、そのメンバー名の一覧を返します。一方、列挙型以外の型に対して呼び出すとArgumentExceptionがスローされる点に注意が必要です。
例1:列挙型以外の型に使用した場合
まず、string型のように列挙型ではない型に対してGetEnumNames()を呼び出した場合の動作を見てみましょう。
using System;
public class Demo {
enum Vehicle { Car, Bus, Bike }
public static void Main() {
try {
Type type = typeof(string);
string[] str = type.GetEnumNames();
Console.WriteLine("定数名の取得結果 = " + str);
Console.WriteLine("定数の一覧を表示します ..");
for (int i = 0; i < str.Length; i++)
Console.Write("{0} ", str[i]);
}
catch (ArgumentException e) {
Console.WriteLine("列挙型ではありません!");
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
出力結果
列挙型ではありません! System.ArgumentException
string型は列挙型ではないため、try-catchブロックで例外がキャッチされ、「列挙型ではありません!」というメッセージと、スローされた例外の型名(System.ArgumentException)が出力されます。
例2:列挙型からメンバー名を取得する場合
次に、正しく列挙型に対して使用した例です。Vehicle列挙型の変数からGetType()で型情報を取得し、メンバー名の一覧を表示しています。
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("定数名の取得結果 = " + str);
Console.WriteLine("定数の一覧を表示します ..");
for (int i = 0; i < str.Length; i++)
Console.Write("{0} ", str[i]);
}
catch (ArgumentException e) {
Console.WriteLine("列挙型ではありません!");
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
出力結果
定数名の取得結果 = System.String[] 定数の一覧を表示します .. Car Bus Bike airplane
Vehicle列挙型にはCar、Bus、Bike、airplaneの4つのメンバーが定義されているため、それらの名前が順番に出力されました。
ポイントまとめ
- GetEnumNames()は、列挙型の全メンバー名をstring[](文字列配列)として返します。
- 戻り値をそのまま文字列連結して出力すると「System.String[]」という型名が表示されるだけなので、実際のメンバー名を確認するにはforループやforeachで各要素を取り出す必要があります。
- 列挙型以外の型(例:string型)に対して呼び出すとArgumentExceptionがスローされるため、実運用ではtry-catchによる例外処理を組み合わせるのが安全です。
- なお、特定の1つの値に対応する名前だけを取得したい場合はGetEnumName()を、型指定なしで静的に呼び出したい場合はEnum.GetNames(typeof(列挙型))を利用することもできます。
-
C#でInt64インスタンスのハッシュコードを取得する方法
C#の Int64.GetHashCode() メソッドを使うと、現在のInt64(long型)インスタンスに対応するハッシュコードを取得できます。このメソッドは、ハッシュテーブルなどのデータ構造で値を効率的に管理する際に利用されます。GetHashCode()メソッドの基本GetHashCode()は、オブジェクトの値をもとに計算された32ビット整数のハッシュコードを返します。同じ値を持つInt64インスタンスは必ず同じハッシュコードを返しますが、異なる値が同じハッシュコードになる場合もあります(ハッシュの衝突)。サンプルコード1以下の例では、2つのlong型の値に対してハッシュコードを取得
-
C#で列挙型(Enum)の型を取得する方法
C#で列挙型(Enum)の型情報を取得するには、GetType()メソッドを使用します。この記事では、実際のコード例を通じて、列挙型の型名や基になる型(Underlying Type)の取得方法をわかりやすく解説します。 列挙型の準備 まず、複数の列挙型の値を格納した配列を用意します。ここでは、.NET標準ライブラリに含まれる ConsoleColor と DayOfWeek の2つの列挙型を使用します。 Enum[] values = { ConsoleColor.Blue, DayOfWeek.Sunday}; GetType()メソッドで型を取得する 列挙値の型を取得するには、各値