Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Enum.ToString return wrong value?

Tags:

c#

enums

tostring

I have a simple enum:

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
}

However, running the the following code:

MyEnum temp = MyEnum.AnyInteger;

string en = temp.ToString();

sets the en string to Reserved.

Why does it happens?

Is there is some other way to set the string to the used enum string (in this case AnyInteger)?

like image 608
sara Avatar asked Apr 22 '12 13:04

sara


2 Answers

when defining an enum the first value start with 0 and it going up from there unless you define other wise, so in your case it's:

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
           }

you can define the same value twice (or more) in a enum. the ToString find a name with the same value:

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

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

if you insist that "Reserved" should have the value 2, put him in the right place of order. otherwise remove the =2

like image 131
Roee Gavirel Avatar answered Nov 15 '22 11:11

Roee Gavirel


It happens because you have set reserved to 2. If you want to set values for your enums, you should do all or none.

like image 44
John Koerner Avatar answered Nov 15 '22 12:11

John Koerner