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

C# 如何使switch语句在c中通用#,c#,switch-statement,C#,Switch Statement,我想在c#中使用switch语句。但是,我想使用枚举值,而不是在case表达式中使用常量。我如何使用这个。如果我试着像这样使用它: string strPageMode=...//some value; switch (strPageMode) { case ModesEnum.SystemHealth: //some code break; } 给出错误。那你有什么用呢?我不想使用If语句。如何声明strPageMode?它需要是一个ModesEnum的实

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

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

给出错误。那你有什么用呢?我不想使用If语句。

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

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

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

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

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

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

switch(UserType)
{
   case User.Guest:
            break;
}
这里UserType是一个字符串,User是enum。它对我有效。

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

NET中的“generic”一词有一个特定的含义,而英语中的“generic”一词有一个一般的含义。我也不明白这跟什么有关系

基于准匈牙利名称,我猜strPageMode是一个字符串(请告诉我,在C#代码中,您并没有这样命名变量)。将switch视为一组if-else语句的一种语法糖,这意味着您正在对字符串和枚举进行相等比较。如果允许这样做,那将是毫无意义的,因为字符串是字符串,枚举是枚举,它们本质上永远不会相等,不管它们的值是什么


您需要将字符串解析为ModesEnum值,并在switch语句中使用该值,或者使用ModesEnum.SystemHealth.ToString()生成case值字符串。

下次请将此作为注释:)我认为这也是答案。嗯,很公平。我想这取决于问题的实质;-)嗯。。。。来吧,现在请复习更新的问题。请注意,我希望关注这个概念。@LasseSpeholt我通常会,但正如uriDium所说,我怀疑这也是他问题的答案(如最初所述)。在提问时,请说明实际错误,而不仅仅是说“给出错误”。好的,谢谢你的建议。。。但是你有什么回答吗?我不这么认为。。。我的案子不管用。你用过哪种语言?是的,先生,我完全同意这种哲学,字符串就是字符串,枚举就是枚举。但是,如果我更改了枚举值,即我的ModeEnum项,那么无论我在哪里使用这个枚举,都不会影响我的类。因此,解决方案是比较输入到类或其方法的字符串,在Enum中检查该字符串或在Enum中转换该字符串。就这样。我只是想把字符串转换成枚举类型,然后我就可以检查了。但是VS3.5不支持有助于执行相同转换的Enum.TryParse()方法。那么我要做什么才能将字符串转换为枚举类型呢?
Enum.Parse()
。同时,如果要更改ModeEnum的值,请确保ModeEnum不公开,因为这会使程序集的更高版本要求调用程序集在开始工作之前进行重新编译(更糟糕的是,这并不明显,您只会有bug)。添加很好,删除或更改会中断运行代码。谢谢。但不想做广告,删除。。。只需要转换枚举中的字符串。@leppie我看你又提出了另一个问题。如果给您带来不便或困惑,我深表歉意:-/