如何在枚举中使用两个相等的项来获得ToString()方法的正确结果

时间:2013-08-22 10:40:54

标签: c# enums

我有枚举

[Flags]
public enum MyEnum
{
   Item1 = 32768,
   Item2 = 65536,
   Item3 = 524288,
   Item4 = Item3
}

ToString()操作的结果:

MyEnum.Item3.ToString() - "Item4"
MyEnum.Item4.ToString() - "Item4"

是否有可能获得:

MyEnum.Item3.ToString() - "Item3"
MyEnum.Item4.ToString() - "Item4" 

4 个答案:

答案 0 :(得分:5)

不,你不能。

  

如果多个枚举成员具有相同的基础值,并且您尝试根据其基础值检索枚举成员名称的字符串表示形式,则您的代码不应对该方法将返回的名称做出任何假设。

Enum.ToString() Method

答案 1 :(得分:0)

不,因为您将Item4设置为等于Item3,并且因为它们只是类型安全的内联(枚举),所以CLR无法区分。

尝试将Item4设置为其他值以获得预期结果。

答案 2 :(得分:0)

不,因为enum不是字符串集合。它们是可以包含某种类型的整数的值类型(通常是int),其中一些积分连接到“名称”(您的Item4)

答案 3 :(得分:0)

首先,我不明白为什么你需要两个具有相同价值的物品。但是,如果您需要相同的枚举值但稍后想要不同的名称,可以尝试使用DescriptionAttribute中的System.ComponentModel

[Flags]
public enum MyEnum
{
   [DescriptionAttribute("Item1")]Item1 = 32768,
   [DescriptionAttribute("Item2")]Item2 = 65536,
   [DescriptionAttribute("Item3")]Item3 = 524288,
   [DescriptionAttribute("Item4")]Item4 = Item3
}

然后你可以用这个方法来获取描述值:

public string ValueOf(Enum value)
{
    FieldInfo fi = value.GetType().GetField(value.ToString());
    DescriptionAttribute[] attributes = (DescriptionAttribute[]) fi.GetCustomAttributes( typeof(DescriptionAttribute), false);
    if (attributes.Length > 0)
    {
        return attributes[0].Description;
    }
    else
    {
        return value.ToString();
    }
}

我实际上没有试过这个,所以MSDN引用的@MarcinJuraszek可能仍然适用于此。

来源:http://blog.waynehartman.com/articles/84.aspx