読者です 読者をやめる 読者になる 読者になる

FlagsAttributeを指定したenumの文字列

ものすごく小ネタですが、FlagsAttributeを指定したenumの文字列表現はどうなるんだろ?とふと気になって試してみました。

// トッピング
[Flags]
public enum Toppings {
    None = 0x00,   // なし
    Nitamago = 0x01,   // 煮卵
    CharSiu = 0x02,    // チャーシュー
    Menma = 0x04,  // メンマ
    Moyashi = 0x08,    // もやし
}

出力してみます。フラグを組み合わせた場合はカンマ区切りの文字列となるようです。文字列の並びはenumの値順ですかね。

Console.WriteLine(Toppings.CharSiu);
// CharSiu

Console.WriteLine(Toppings.CharSiu | Toppings.Menma);
// CharSiu, Menma

Console.WriteLine(Toppings.CharSiu | Toppings.Nitamago | Toppings.Menma);
// Nitamago, CharSiu, Menma

Console.WriteLine(Toppings.None);
// None

もちろんカンマ区切りの文字列をパースできると。

var toppings = default(Toppings);
if (Enum.TryParse<Toppings>("CharSiu, Moyashi, Nitamago", out toppings)) {
    Console.WriteLine(toppings);
    // Nitamago, CharSiu, Moyashi
}

どうでもいいことですが、あぶりメンマが好きです。