[ VB.NET / C# ] 列挙体(Enum) の一覧の取得や定義名から値の取得など

Pocket

ここでは、以下に示すような列挙体操作のサンプルコードを掲載しています。

  1. 列挙体の一覧を foreach を使って取得する方法
  2. 列挙体の定義名からその値を取得する方法
  3. 列挙体に定義されている名前または値であるかを確認する方法
スポンサーリンク

各サンプルコードでは、以下の列挙体を使用しています。

VB.NET

'使用するEnum定義
Public Enum Hokuriku As Integer

    Toyama = 1
    Ishikawa = 2
    Fukui = 4

End Enum

C#

// 使用するEnum定義
public enum Hokuriku 
{
    Toyama = 1,
    Ishikawa = 2,
    Fukui = 4
};
列挙体の一覧を foreach を使って取得する方法

列挙体の定義名、値およびその両方を一覧ですべて取得するサンプルコードです。

VB.NET

    ' 値の一覧のみを取得
    For Each val As Integer In [Enum].GetValues(GetType(Hokuriku))
        Console.WriteLine(val.ToString())
    Next
    '出力
    ' 1
    ' 2
    ' 4

    ' 名前の一覧のみを取得
    For Each name As String In [Enum].GetNames(GetType(Hokuriku))
        Console.WriteLine(name)
    Next
    '出力
    ' Toyama
    ' Ishikawa
    ' Fukui

    ' 名前と値の一覧を取得
    For Each val As Hokuriku In [Enum].GetValues(GetType(Hokuriku))
        Console.WriteLine(val.ToString() + " = " + Convert.ToInt32(val).ToString())
    Next
    '出力
    ' Toyama = 1
    ' Ishikawa = 2
    ' Fukui = 4

C#

    // 値の一覧のみを取得
    foreach (int val in Enum.GetValues(typeof(Hokuriku))) {
        Console.WriteLine(val.ToString());
    }
    //出力
    // 1
    // 2
    // 4

    // 名前の一覧のみを取得
    foreach (string name in Enum.GetNames(typeof(Hokuriku)))
    {
        Console.WriteLine(name);
    }
    //出力
    // Toyama
    // Ishikawa
    // Fukui

    // 名前と値の一覧を取得
    foreach (Hokuriku val in Enum.GetValues(typeof(Hokuriku)))
    {
        Console.WriteLine(val.ToString() + " = " + Convert.ToInt32(val).ToString());
    }
    //出力
    // Toyama = 1
    // Ishikawa = 2
    // Fukui = 4
列挙体の定義名からその値を取得する方法

列挙体の名前(文字列)からその値を取得するサンプルコードです。なお、定義名をカンマで区切りで複数指定する ことができる点がポイントです。なお、その結果はそれぞれの値の論理和となります。

VB.NET

    ' 名前からEnumオブジェクトに変換する
    Dim toyama As Hokuriku = [Enum].Parse(GetType(Hokuriku), "Toyama")
    Console.WriteLine(toyama.ToString() + " = " + Convert.ToInt32(toyama).ToString())
    '出力
    ' Toyama=1

    ' 複数の定義名を指定した場合は、その値の論理和が返される
    Dim bitor As Hokuriku = [Enum].Parse(GetType(Hokuriku), "Ishikawa,Fukui")
    Console.WriteLine(bitor.ToString() + " = " + Convert.ToInt64(bitor).ToString())
    '出力
    ' 6=6

C#

    // 名前からEnumオブジェクトに変換する
    Hokuriku toyama = (Hokuriku)Enum.Parse(typeof(Hokuriku), "Toyama");
    Console.WriteLine(toyama.ToString() + " = " + Convert.ToInt32(toyama).ToString());
    //出力
    // Toyama=1

    // 複数の定義名を指定した場合は、その値の論理和が返される
    Hokuriku bitor = (Hokuriku)Enum.Parse(typeof(Hokuriku), "Ishikawa,Fukui");
    Console.WriteLine(bitor.ToString() + " = " + Convert.ToInt64(bitor).ToString());
    //出力
    // 6=6
列挙体に定義されている名前または値であるかを確認する方法

Enum.IsDefined メソッドを使用して、列挙体に定義されている値、または名前であるかを確認することができます。

VB.NET

    ' Enum定義されている名前または値であるか確認する
    Dim exists As Boolean
    exists = [Enum].IsDefined(GetType(Hokuriku), 3) '値で指定する
    Console.WriteLine(exists.ToString())
    '出力
    ' False

    exists = [Enum].IsDefined(GetType(Hokuriku), "Fukui") '名前で指定する
    Console.WriteLine(exists.ToString())
    '出力
    ' True

C#

    // Enum定義されている名前または値であるか確認する
    Boolean exists;
    exists = Enum.IsDefined(typeof(Hokuriku), 3); // 値で指定する
    Console.WriteLine(exists.ToString());
    //出力
    // False

    exists = Enum.IsDefined(typeof(Hokuriku), "Fukui"); // 名前で指定する
    Console.WriteLine(exists.ToString());
    //出力
    // True

 

参考
スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>