2017-02-15 6 views
0

У меня есть один перечисление, как показано нижеКак использовать Enum в переключатель случае для сравнения string- C#

public enum Colors 
{ 
    red, 
    blue, 
    green, 
    yellow 
} 

Я хочу использовать это переключатель случай

public void ColorInfo(string colorName) 
{ 
    switch (colorName) 
    { 
     // i need a checking like (colorname=="red") 
     case Colors.red: 
      Console.log("red color"); 
      break; 
    } 
} 

Я получаю следующее сообщение об ошибке

Cannot implicitly convert type 'Color' to string 

Может ли кто-нибудь помочь в этом ..

+0

Try 'переключатель ((цвет) Enum.Parse (TYPEOF (Colors), ColorName)) ' – dana

ответ

2

Ваш лучший выбор на мой взгляд - попытаться разобрать значение string, которое вы получите как ввод как значение Colors, тогда вы можете сделать switch на основе перечисления. Вы можете сделать это с помощью функции Enum.TryParse<TEnum>:

public void ColorInfo(string colorName) 
{ 
    Colors tryParseResult; 
    if (Enum.TryParse<Colors>(colorName, out tryParseResult)) 
    { 
     // the string value could be parsed into a valid Colors value 
     switch (tryParseResult) 
     { 
      // i need a checking like (colorname=="red") 
      case Colors.red: 
       Console.log("red color"); 
       break; 
     } 
    } 
    else 
    { 
     // the string value you got is not a valid enum value 
     // handle as needed 
    } 
} 
+0

Так многословный для такой тривиальной концепции. Не одна из моих любимых вещей о csharp. – Manachi

0

Вы не можете сравнивать enum к string, как они отличаются от других типов.

Если вы хотите сравнить string с enum описания, то вам нужно преобразовать его в строке первым:

public void ColorInfo(string colorName) 
{ 
    if (Colors.red.ToString() == colorName) 
     Debug.Print("red color"); 
} 

Вы не можете использовать switch заявления для выполнения преобразования строки в каждой case сусла быть константой, а Colors.red.ToString() - нет.

Альтернативой является преобразование строки в enum, а затем оператор switch для сравнения.

public void ColorInfo(string colorName) 
{ 
    try 
    { 
     Colors color = (Colors)Enum.Parse(typeof(Colors), colorName); 
     switch (color) 
     { 
      case Colors.red: 
       Debug.Print("red color"); 
       break; 
     } 
    } 
    catch(ArgumentException ex) 
    { 
     Debug.Print("Unknown color"); 
    } 
} 
+0

Функция «Enum.Parse» выдаст исключение, значение «colorName» не может быть проанализировано в «Цвета». –

+0

после поиска по Google, используя такой же подход можно использовать Enum.TryParse..right ?? – vmb

+0

, конечно, вы можете, вот что мой ответ использует. Я просто хотел указать, что использование этого кода может привести к неожиданному исключению, поскольку оно не окружено 'try' /' catch'. –

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