2013-11-19 2 views
0

Я определил Enum. У меня также есть 2 метода:По умолчанию Тип Enum, почему этот код не компилируется?

  1. метод 1 - получите тип перечисления - перечисление типа по умолчанию INT поэтому он будет печатать System.Int32

  2. Метод 2 - будет иметь переключатель случай, сравнить тип перечисления с простое число - поэтому в случае, если enum является int, регистр должен быть скомпилирован без проблем и без кастингов.

Но этот код не компилируется, и я получаю две ошибки (точка ошибки на случай 1 и случай 2 в случае переключения)

Не может неявно преобразовать тип «Int» в «Color ». Явное преобразование существует (вы пропали без вести броска?)

Кто-то может объяснить, почему я получаю сообщение об ошибке, даже если Color типа является int?

Чтобы скомпилировать этот код, мне нужно сделать отливку до Color до int.

Код:

public enum Color 
{ 
    RED,   // 0 
    BLUE,   // 1 
    GREEN   // 2 
}; 

Color color = Color.BLUE; 

private void boo(object sender, EventArgs e) 
{ 
    string str = Enum.GetUnderlyingType(color.GetType()).ToString(); 

    // it will print 'System.Int32' 
    System.Console.WriteLine(str); 
} 

// the switch case make the compile error - but the color is int 
private void foo() 
{ 
    switch(color) 
    { 
     case 0: 
     { 

     } 
     break; 

     case 1: 
     { 

     } 
     break; 

     case 2: 
     { 

     } 
     break; 
    } 
} 
+2

Вам не нужны скобки для блоков вашего корпуса. –

+3

Цвет ** не ** 'int'. Это «Цвет», с базовым типом 'int'. Почему вы считаете, что перечисления и ints одинаковы? –

+0

переключатель ((int) цвет), если вам не нравится использовать значения enum внутри переключателя –

ответ

3

Ваш код должен быть:

switch(color) 
{ 
    case Color.RED: 
     break; 
... 
} 

или

switch ((int)color) 
{ 
    case 0: 
     break; 
... 
} 
+0

'RED' некоторая константа перечисления типа' Цвет'? –

+0

Должно быть 'case Color.RED:' – Alex

+0

Да, немой ошибка. Спасибо что подметил это. – Scottie

1

Вы можете непосредственно проверить с Enum Types

Попробуйте:

  private void foo() 
      { 
      switch(color) 
      { 
       case Color.RED: 
       { 

       } 
       break; 

       case Color.GREEN: 
       { 

       } 
       break; 

       case Color.BLUE: 
       { 

       } 
       break; 
      } 
     } 
Смежные вопросы