我有枚举
[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"
答案 0 :(得分:5)
答案 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可能仍然适用于此。