Enum & Switch Case - PullRequest
       40

Enum & Switch Case

3 голосов
/ 08 мая 2009

Привет, я использую перечисления, преобразованные в строку с переключателем, но это не работает. Это приводит к ошибке компиляции: невозможно неявно преобразовать тип 'userControl_commontop.UserType' в 'string'

Код:

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
}

Ответы [ 6 ]

5 голосов
/ 08 мая 2009

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

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;
  }
}
5 голосов
/ 08 мая 2009

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

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

switch ((UserType)Enum.Parse(usertype, typeof(UserType))) {
  ...
}
3 голосов
/ 08 мая 2009

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

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

как

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

и затем вы можете вызвать свой оператор switch как:

switch (utEnum)
    { ... }
1 голос
/ 08 мая 2009

Ваша функция принимает параметр типа string, а затем вы используете этот же параметр для сравнения типов, принадлежащих 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 голосов
/ 08 мая 2009

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

или

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

(UserType) Enum.Parse (typeof (UserType), usertype)

0 голосов
/ 08 мая 2009

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

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

...