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

拡張メソッドでenumを拡張

C#

ってのも出来るのか。Javaenumよりスマートじゃない気がするけど、これでJavaenumっぽいこと + null安全が実現できる!

public enum SampleEnum { Hoge, Piyo, Foo, Bar }

public static class SampleEnumExtension
{
    // enumのToStringは遅いので独自実装
    public static string ToStr(this SampleEnum e)
    {
        switch (e)
        {
            case SampleEnum.Hoge: return "Hoge";
            case SampleEnum.Piyo: return "Piyo";
            case SampleEnum.Foo: return "Foo";
            case SampleEnum.Bar: return "Bar";
            // 追加しても遅いけど動くようにしておく
            default: return e.ToString();
        }
    }
    
    // メソッドを追加
    public static void Proc(this SampleEnum e)
    {
        Console.WriteLine(e.ToStr().ToLower());
    }
}
SampleEnum.Hoge.Proc(); // hoge
// enumは値型だからnull安全!
//SampleEnum e = null;