LoginSignup
7

More than 5 years have passed since last update.

Enum の値から、シンボル文字列を得る

Last updated at Posted at 2014-07-11

型が変わってなかったら ToString だけでよかったんかー。別に GetName とか使わんでよかったんや…(涙目)

Module Module1
    Enum NumberEnum
        ZERO
        ONE
        TWO
        THREE
        FOUR
        FUOR = FOUR
        FIVE
        SIX
        SEVEN
        EIGHT
        NINE
        TEN
    End Enum

    Sub Main()
        For i As NumberEnum = NumberEnum.ZERO To NumberEnum.TEN
            Console.WriteLine(String.Format("{0}={1}", i.ToString(), [Enum].GetName(GetType(NumberEnum), i)))
        Next
        Console.ReadLine()
    End Sub
End Module
ZERO=ZERO
ONE=ONE
TWO=TWO
THREE=THREE
FUOR=FUOR
FIVE=FIVE
SIX=SIX
SEVEN=SEVEN
EIGHT=EIGHT
NINE=NINE
TEN=TEN

本当は 4 が来た時に、FOUR が来るか、FUOR になるか、確認するだけのはずあったんや…

追記

どうも、FOUR がくるか、FUOR が来るかは、不定(未定義?)のような雰囲気。[Enum].GetNames メソッドで、全要素の文字列を取得するのが安全のような雰囲気だ。

Enum.ToString メソッド (String)

複数の列挙型のメンバーの基になる値が同じであり、その基になる値に基づいて列挙型メンバーの名前の文字列形式を取得しようとする場合、メソッドから返される名前についてコードで一切の前提を排除する必要があります。 たとえば、次の列挙型では Shade.Gray と Shade.Grey という 2 つのメンバーが定義されていますが、これらの基になる値は同じです。

次のメソッド呼び出しは、基になる値が 1 である Shade 列挙体のメンバーの名前を取得しようとします。 メソッドで "Gray" または "Grey" を返すことはできますが、特定の文字列が返されることを想定したコーディングは避けてください。

追記2

おれには、[Enum].TryParse(Of 型)(文字列,変数) があれば十分やったんやー

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7