0

可能重复:
C# 枚举 - 我的枚举可以有友好的名称吗?
使用枚举属性将字符串转换为枚举

我有字节值的枚举:

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"

可能没有将枚举类型从 BYTE 更改为 STRING?

4

3 回答 3

6

您不能将枚举类型设置为string. 有效的基本类型是byte, sbyte, short, ushort, int, uint, long, 和ulong.

但是,您可以使用该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 回答