2012-04-22 7 views
4

У меня есть простое перечисление:enum.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 темп = MyEnum.AnyInteger;

string en = temp.ToString();

устанавливает строку en в значение Зарезервировано.

Почему это происходит?

Есть ли другой способ установить строку для используемой строки перечисления (в данном случае AnyInteger)?

+2

'MyEnum.AnyInteger == MyEnum.Reserved' –

ответ

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. 

, если вы настаиваете, что «Reserved» должен иметь значение 2, поместите его в нужном месте порядка. в противном случае удалите =2

+0

еще одна вещь, о которой нужно помнить. в вашем коде '(MyEnum.AnyInteger == MyEnum.Reserved)' истинно ... –

4

Это происходит из-за того, что вы зарезервировали для 2. Если вы хотите установить значения для своих перечислений, вы должны сделать все или ничего.

+1

Это абсолютно не так. вы можете иметь несколько наборов значений. и иногда вам это нужно. A - вы можете установить первое значение в X, и все остальные значения будут автоматически X + 1, X + 2 ... B - В случае, если большинство значений вам не подходит, но вы хотите иметь одно значение. как зарезервировано здесь, но со значением, которое обычно не перечитывалось, как 9999 или что-то еще. –

+0

Обратите внимание, что я не сказал, что вам нужно установить все или ничего, я сказал, что вам следует. Это была рекомендация, а не мандат. Я согласен с вами в том, что вы можете делать именно то, что сделала Сара в своем посте, но тогда вы можете укусить небольшую ошибку, подобную этой. –

+0

прав ... хотя я до сих пор не думаю, что это то, чего вам следует избегать. просто используйте с осторожностью. –

Смежные вопросы