[C#][VB] Enumの値をループ(列挙)する方法

[C#][VB] Enumの値をループ(列挙)する方法

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の扱いでした。

C#カテゴリの最新記事