enum.ToString返回错误的值?

时间:2012-04-22 13:17:54

标签: 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
           }

但是,运行以下代码:

  

MyEnum temp = MyEnum.AnyInteger;

     

string en = temp.ToString();

将en字符串设置为Reserved。

为什么会这样?

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

之所以发生这种情况,是因为您已将保留设置为2.如果要为枚举设置值,则应全部执行或不执行任何操作。