enum.ToString返回错误的值?

sar*_*ara 4 c# enums tostring

我有一个简单的枚举:

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
           }
Run Code Online (Sandbox Code Playgroud)

但是,运行以下代码:

MyEnum temp = MyEnum.AnyInteger;

string en = temp.ToString();

将en字符串设置为Reserved.

为什么会这样?

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

Roe*_*rel 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
           }
Run Code Online (Sandbox Code Playgroud)

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

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

string en=temp.ToString(); // return the name of the first name with value 2.
Run Code Online (Sandbox Code Playgroud)

如果你坚持认为"保留"应该具有值2,请将他放在正确的位置.否则删除=2