酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows Mobile(.NET Compact Framework)でenumに文字列の属性を付与

enumに文字列の属性を付けてみました。画面IDをenumで持たせているので、enumに画面名を持たせられたら楽だなぁと思ったのがきっかけです。

ほとんどいげ太さんのコードを流用しています。.NET Compact Frameworkからの利用だったので、EnumクラスのGetNameメソッドが存在しておらず、そこだけ修正しています。

以下にサンプルコードを示します。

    /// <summary>
    /// 属性で指定されたラベル文字列を取得する。
    /// </summary>
    /// <param name="value">ラベル付きフィールド</param>
    /// <returns>ラベル文字列</returns>
    public static string GetLabel(Enum value)
    {
        Type enumType = value.GetType();

        // .NET Compact FrameworkにはGetNameメソッドが存在しない
        // string name = Enum.GetName(enumType, value);
        string name = value.ToString();

        LabeledEnumAttribute[] attrs =
            (LabeledEnumAttribute[])enumType.GetField(name)
            .GetCustomAttributes(typeof(LabeledEnumAttribute), false);
        return attrs[0].label;
    }