0

重複の可能性:
C# 列挙型 - 列挙型にわかりやすい名前を付けることができますか?
文字列を enum 属性で enum にキャストする

私はバイト値を持つ列挙型を持っています:

enum MarketingEventType : byte {MARKETING_CAMPAIGN, TELESALES, MARKETING_ACTIONS};

ToSting() メソッドで取得するすべての要素に名前を付けたいと思います。例えば:

MarketingEventType.TELESALES.ToString(); // I get "bla bla bla"
MarketingEventType.MARKETING_ACTIONS.ToString(); // I get "la la la"

enumの型をBYTEからSTRINGに変えなくても可能?

4

3 に答える 3

6

列挙型を に設定することはできませんstring。有効なベースタイプbyteは、、、、、、、、およびsbyteです。shortushortintuintlongulong

ただし、次のDescription属性を使用できます。

enum MarketingEventType
{
    [Description("bla bla bla")]
    TELESALES,
}

列挙型の説明を取得するのはちょっと面倒ですが、このメソッドを使用できます (または、拡張メソッドを作成することもできます!):

public static string GetEnumDescription(Enum value)
{
    FieldInfo fi = value.GetType().GetField(value.ToString());

    DescriptionAttribute[] attributes =
        (DescriptionAttribute[])fi.GetCustomAttributes(
        typeof(DescriptionAttribute),
        false);

    if (attributes != null &&
        attributes.Length > 0)
        return attributes[0].Description;
    else
        return value.ToString();
}
于 2013-01-25T15:13:33.900 に答える
0

あなたが望むのが「マーケティング」と「テレセールス」だけであるなら、あなたは実行するでしょう

MarketingEventType.TELESALES.ToString();

...あなたが質問に持っているように。

基になるバイト値「0」と「1」が必要な場合は、次のように実行します。

MarketingEventType.TELESALES.ToString("d");
于 2013-01-25T15:15:54.050 に答える
0

列挙値の文字列を返すメソッドを単純に作成しないのはなぜですか?

public string GetMarketingEventName(MarketingEventType eventType)
{
    switch(eventType)
    {
        case MarketingEventType.MARKETING_CAMPAIGN: return "blah blah blah";
        case MarketingEventType.TELESALES: return "lalala";
        case MarketingEventType.MARKETING_ACTIONS: return "boo";
        default:
            throw new ArgumentException("eventType");
    }
}

なぜあなたはそれに点を付けるのですか?UI に文字列を表示する必要があるため、UI をドメインから分離することをお勧めします。したがって、コントローラークラスのそのようなメソッドは、ドメインの属性よりも優れていると思います。ローカライズについても検討してください。

于 2013-01-25T15:19:55.903 に答える