2013-11-13 4 views
2

Я хочу использовать оператор switch, чтобы избежать многих if. Так что я сделал это:Как использовать оператор switch с перечислениями C#

 public enum Protocol 
     { 
      Http, 
      Ftp 
     } 

     string strProtocolType = GetProtocolTypeFromDB(); 

     switch (strProtocolType) 
     { 
      case Protocol.Http: 
       { 
        break; 
       } 
      case Protocol.Ftp: 
       { 
        break; 
       } 
     } 

, но у меня есть проблема сравнения Enum и String. Поэтому, если я добавил Protocol.Http.ToString(), есть еще одна ошибка, потому что она допускает только ПОСТОЯННУЮ оценку. Если я изменю его на это

 switch (Enum.Parse(typeof(Protocol), strProtocolType)) 

Невозможно также. Итак, в моем случае можно использовать оператор switch или нет?

+5

Я думаю, вы должны сделать результат Enum.Parse для протокола – jbl

+0

Что вы получаете от 'GetFromProtocolTypeFromDB' это' 'enum' или string? – Habib

+1

Почему '' GetFromProtocolTypeFromDB' возвращает 'Protocol' вместо' string'? –

ответ

3

Вам необходимо нанести Enum.Parse результат на Protocol, чтобы заставить его работать.

switch ((Protocol)Enum.Parse(typeof(Protocol), strProtocolType)) 
1

Вы пробовали это:

public enum Protocol 
    { 
     Http, 
     Ftp 
    } 

    string strProtocolType = GetFromProtocolTypeFromDB(); 
    Protocol protocolType = (Protocol)Enum.Parse(typeof(Protocol), strProtocolType); 

    switch (protocolType) 
    { 
     case Protocol.Http: 
      { 
       break; 
      } 
     case Protocol.Ftp: 
      { 
       break; 
      } 
    } 
+0

Спасибо за отзыв, исправлено – tyshka

2

В качестве альтернативы с использованием универсального API:

Protocol protocol; 
if(Enum.TryParse(GetFromProtocolTypeFromDB(), out protocol) 
{ 
    switch (protocol) 
    { 
     case Protocol.Http: 
      { 
       break; 
      } 
     case Protocol.Ftp: 
      { 
       break; 
      } 
     // perhaps a default 
    } 
} // perhaps an else 

Хотя, честно говоря, это может быть проще просто проверить с == или string.Equals (если вы хотите нечувствительность к регистру и т. д.) вместо использования switch.

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