Enum&开关盒

时间:2009-05-08 07:34:38

标签: asp.net enums switch-statement case

您好我使用转换为带开关的字符串的枚举但它不起作用。它给出了编译错误:无法将类型'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 个答案:

答案 0 :(得分:5)

枚举不是字符串,只是常量const int MY_VALUE = 1;是一个字符串。

您应该将字符串更改为枚举:

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

答案 1 :(得分: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;
  }
}

答案 2 :(得分:3)

您可以使用此函数将userType参数转换为枚举值:

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

as

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

然后你可以将你的switch语句称为:

switch (utEnum)
    { ... }

答案 3 :(得分:1)

您的函数接受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;
  }
}

答案 4 :(得分:0)

您无法将字符串与枚举进行比较。

你应该将Enum传递给你的方法。

答案 5 :(得分:0)

选项1: 更改CommonTopChangesnew以接受UserType枚举作为参数

选项2: 使用Enum.Parse将您的字符串转换为切换块中的UserType枚举:

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