如何在c#中使switch语句通用

时间:2010-08-19 08:29:56

标签: c# switch-statement

我想在c#中使用switch语句。但不是在case表达式中使用常量,而是想使用枚举值。我该如何使用它。如果我尝试使用它:

 string strPageMode=...//some value;
 switch (strPageMode)
 {
     case ModesEnum.SystemHealth:
     //some code
     break;
}

给出错误。什么必须使用呢?我不想使用If语句。

5 个答案:

答案 0 :(得分:5)

如果它是一个字符串,那么这将起作用:

ModesEnum res;

//Implicit generic as opposed to Enum.Parse which returns object
Enum.TryParse(strPageMode, out res); //returns false if parsing failed

switch (res)
{
    case ModesEnum.SystemHealth:
        break;
}

如上所述,TryParse中未提供通用< .Net 4.0。否则,请使用Enum.Parse

答案 1 :(得分:3)

strPageMode如何宣布?它需要是ModesEnum的实例,我猜它是一个字符串。

答案 2 :(得分:2)

假设strPageMode代表ModesEnum的一个可能值的名称,您可以这样做:

switch (Enum.Parse(typeof(ModesEnum), strPageMode, false))
{
    ... as before
}

答案 3 :(得分:1)

枚举文字(而不是该枚举类型变量的当前值)常量。

在.NET中有一个特定的“泛型”一词,在英语中有一般意义。我不明白这与这两者有什么关系。

根据准匈牙利名称,我猜测strPageMode是一个字符串(请告诉我你在C#代码中没有真正命名这样的变量)。考虑将switch作为一组if-else语句的一种语法糖,这意味着你在字符串和枚举之间进行相等比较。如果这是允许的话,那将是毫无意义的,因为字符串是一个字符串而enum是一个枚举,无论它们的值如何,它们本身都不会相等。

您需要将字符串解析为ModesEnum值,并在switch语句中使用它,否则使用ModesEnum.SystemHealth.ToString()创建case值字符串。

答案 4 :(得分:0)

在我的一个项目中,我以类似的方式使用了switch case。

switch(UserType)
{
   case User.Guest:
            break;
}

此处UserType是一个字符串,User是枚举。它对我有用。