0

我有枚举

[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

4 回答 4

5

不,你不能。

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

Enum.ToString()方法

于 2013-08-22T10:42:59.763 回答
0

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

尝试设置Item4为不同的值以获得预期的结果。

于 2013-08-22T10:43:20.153 回答
0

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

于 2013-08-22T10:43:23.217 回答
0

首先,我不明白为什么您需要两个具有相同价值的物品。但是,如果您需要相同的枚举值但以后想要不同的名称,也许可以尝试使用DescriptionAttributein 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

于 2013-08-22T10:55:40.960 回答