打印枚举值

时间:2015-11-05 13:01:39

标签: c# enums

我有一些代码采用ulong参数,并且通过使用映射字典,将ulong映射到enum中的值。但是,枚举包含的值对于所有意图都是相同的,因此稍后会在枚举中以与AfricanMango类似的方式重新分配这些值在以下枚举中:

public enum Fruits
{
    Banana = 0,
    Strawberry,
    Apple,
    Peach,
    Mango,
    Berry,

    AfricanMango = Mango,

    Cranberry
}

这个告诉编译器对AfricanMangoMango使用相同的值,无论从设计的角度来看这个实现是否真的有意义了空气。

我的代码将输入转换为枚举值就好了,在评估函数的结果时,它返回Fruits.Cranberry。这是我期待的价值。

但是,当随后使用该函数的结果(调试器声明的结果为Fruits.Cranberry)时,结果突然转移到Fruits.Berry,这可以通过运行来证明以下代码:

var fruit = Fruits.Cranberry;

Console.WriteLine(fruit);

人们会希望这会输出Cranberry,因为这是它所分配的值,但实际上这会输出Berry

这是预期的行为吗?枚举是否会根据它们之前的值进行查找,而AfricanMango是否会以某种方式搞乱这个问题?

2 个答案:

答案 0 :(得分:6)

如果您没有为enum项指定值,则会按顺序创建它们。因此,在这种情况下,AfricanMango的值等于Mango,这意味着之后的值将Mango + 1映射到Berry

来自MSDN documentation

  

默认情况下,第一个枚举数的值为0,每个连续的枚举数的值增加1

答案 1 :(得分:5)

是的,分配只是增加了。它确实需要前一项+ 1的值。请参阅Reflector中的代码:

public enum Fruits
{
    AfricanMango = 4,
    Apple = 2,
    Banana = 0,
    Berry = 5,
    Cranberry = 5, // <-- uch
    Mango = 4,
    Peach = 3,
    Strawberry = 1
}

您应该将计算值放在最后。这样,计数不会中断,也不会手动分配值。

来自MSDN

  

默认情况下,第一个枚举数的值为0,每个连续枚举数的值增加1.例如,在下面的枚举中,Sat为0,Sun为1,Mon为2,依此类推。