2009-05-08 3 views
3

Привет Я использую перечисления, преобразованные в строку с помощью переключателя, но это не работает. Это дает ошибку компиляции: Не удается неявно преобразовать тип «userControl_commontop.UserType» в «строка»Enum & Switch Case

Код:

private void CommonTopChangesnew(string usertype) 
{ 

    switch (usertype.Trim().ToUpper()) 
    { 
     case UserType.NORMAL : 
      hlkSAD.Enabled = false; 
      hlkMRTQuery.Enabled = false; 
      hlkReqViewer.Enabled = false; 
      hlkSendnotif.Enabled = false; 
      break; 
     case UserType.POWER : 
      hlkSAD.Enabled = false; 
      hlkReqViewer.Enabled = false; 
      hlkSendnotif.Enabled = false; 
      break; 
    } 
} 

enum UserType 
{ 
    NORMAL, 
    POWER, 
    ADMINISTRATOR 
} 
+0

Пожалуйста переформатировать фрагмент кода; он в настоящее время не читается ... –

ответ

3

Вы можете преобразовать параметр UserType, чтобы значение перечисления с помощью этой функции:

object Enum.Parse(System.Type enumType, string value, bool ignoreCase); 

в

UserType utEnum = Enum.Parse(UserType, userType, true); 

, а затем вы можете позвонить переключатель заявление как:

switch (utEnum) 
    { ... } 
5

Перечисление не является строкой, не больше, чем постоянное const int MY_VALUE = 1; является строкой.

Вы должны изменить строку в Enum:

switch ((UserType)Enum.Parse(usertype, typeof(UserType))) { 
    ... 
} 
+1

Первый вариант, вероятно, не будет работать, поскольку коммутатор требует, чтобы операторы case были постоянными. – Josh

+1

первое заявление не будет работать! –

+0

@ShaulBehr Я знаю, что это старый ... но Хари совершенно прав - первый пример НЕ РАБОТАЕТ. Это потому, что операторы switch требуют, чтобы случаи были постоянными (хотя, если есть способ обойти это, я очень хочу его услышать). – Maverick

5

Вы должны попробовать это:

enum UserType 
{ 
    NORMAL, 
    POWER, 
    ADMINISTRATOR 
} 

private void CommonTopChangesnew(string usertype) 
{ 
    switch ((UserType)Enum.Parse(typeof(UserType), usertype, true)) 
    { 
    case UserType.NORMAL: 
     hlkSAD.Enabled = false; 
     hlkMRTQuery.Enabled = false; 
     hlkReqViewer.Enabled = false; 
     hlkSendnotif.Enabled = false; 
     break; 
    case UserType.POWER: 
     hlkSAD.Enabled = false; 
     hlkReqViewer.Enabled = false; 
     hlkSendnotif.Enabled = false; 
     break; 
    } 
} 
1

Ваша функция принимает параметр типа строки, а затем использовать один и тот же параметр для сравнения типов принадлежащих Enum. Здесь лежит конфликт.

Ваша функция должна быть вместо этого:

private void CommonTopChangesnew(UserType usertype) 
{ 

    switch (usertype) 
    { 
    case UserType.NORMAL : 
     hlkSAD.Enabled = false; 
     hlkMRTQuery.Enabled = false; 
     hlkReqViewer.Enabled = false; 
     hlkSendnotif.Enabled = false; 
     break; 
    case UserType.POWER : 
     hlkSAD.Enabled = false; 
     hlkReqViewer.Enabled = false; 
     hlkSendnotif.Enabled = false; 
     break; 
    } 
} 
0

Вы не можете сравнить строку с Enum.

Вы должны передать Enum в свой метод.

0

Вариант 1: Изменить CommonTopChangesnew принять UserType перечисление в качестве параметра

или

Вариант 2: Используйте Enum.Parse, чтобы преобразовать вашу строку в UserType перечисление в вашем блоке переключателя:

(UserType) Enum.Parse (TypeOf (UserType), UserType)