5

我有一个简单的枚举:

public enum MyEnum
{
    [Description("Zero")]
    Zero,
    [Description("A positive number")]
    Positive,
    [Description("Any integer")]
    AnyInteger,
    [Description("A negative number")]
    Negative,
    [Description("Reserved number")]
    Reserved =2
}

但是,运行以下代码:

MyEnum temp = MyEnum.AnyInteger;

string en = temp.ToString();

将 en 字符串设置为 Reserved。

为什么会发生?

是否有其他方法可以将字符串设置为使用的枚举字符串(在本例中为 AnyInteger)?

4

2 回答 2

5

定义枚举时,第一个值从那里开始,0除非您另外定义,否则它会从那里上升,所以在您的情况下是:

public enum MyEnum
        {
            [Description("Zero")]
            Zero, //0
            [Description("A positive number")]
            Positive, //1
            [Description("Any integer")]
            AnyInteger, //2
            [Description("A negative number")]
            Negative, //3
            [Description("Reserved number")]
            Reserved = 2 // it's 2 again
           }

您可以在枚举中定义相同的值两次(或更多)。ToString查找具有相同值的名称:

MyEnum temp=MyEnum.AnyInteger; //temp = 2

string en=temp.ToString(); // return the name of the first name with value 2.

如果您坚持“保留”的值应为 2,请将他放在正确的位置。否则删除=2

于 2012-04-22T13:24:52.620 回答
4

发生这种情况是因为您已将 reserved 设置为 2。如果您想为枚举设置值,您应该全部执行或不执行。

于 2012-04-22T13:20:29.047 回答