我想在c#中使用switch语句。但不是在case表达式中使用常量,而是想使用枚举值。我该如何使用它。如果我尝试使用它:
string strPageMode=...//some value;
switch (strPageMode)
{
case ModesEnum.SystemHealth:
//some code
break;
}
给出错误。什么必须使用呢?我不想使用If语句。
答案 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是枚举。它对我有用。