Enumの値をすべて列挙したい
稀によくあるのですが、まったく思い出せないのでここにメモしておきます。Enumの値をループしながら扱う方法です。
を使います。
Enum.GetValues() を使います。ここれでは曜日を表す列挙体(DayOfWeek)の値を、文字列と数値の組み合わせで出力しています。
C#
// 列挙体の値をすべて表示
foreach (DayOfWeek value in Enum.GetValues(typeof(DayOfWeek)))
{
var intValue = (int)value;
var strValue = value.ToString();
Console.WriteLine($"{strValue}, {intValue}");
}
VB.NET
' 列挙体の値をすべて表示
For Each value As DayOfWeek In [Enum].GetValues(GetType(DayOfWeek))
Dim intValue As Integer = value
Dim strValue As String = value.ToString()
Console.WriteLine(strValue & ", " & intValue)
Next
Enumの値をすべて列挙したい(ジェネリックで …)
ジェネリックで共通処理としてEnumを扱いたいとうことも、これまた稀によくあることです。しかし C#(VB.NET) では Enum を直接型制約として利用はできません。したがって構造体(struct)で制約しておく方法を取ります。
以下の例は上の例と同じような処理をしています。違うのはジェネリックで指定した型について扱っている点です。
C#
// ジェネリック版
// こんな感じで呼ぶ → ShowEnum<DayOfWeek>();
public static void ShowEnum<TEnum>() where TEnum: struct
{
foreach (TEnum value in Enum.GetValues(typeof(TEnum)))
{
var intValue = Convert.ToInt32(value);
var strValue = value.ToString();
Console.WriteLine($"{strValue}, {intValue}");
}
}
' ジェネリック版
' こんな感じで呼ぶ → ShowEnum(Of DayOfWeek)()
Sub ShowEnum(Of TEnum As {Structure})()
For Each value As TEnum In [Enum].GetValues(GetType(DayOfWeek))
Dim intValue As Integer = Convert.ToInt32(value)
Dim strValue As String = value.ToString()
Console.WriteLine(strValue & ", " & intValue)
Next
End Sub
以上、覚えていれば嬉しいEnumの扱いでした。
コメントを書く