使用带常量或枚举的switch语句? (哪个更好)? C#

时间:2009-11-25 18:51:37

标签: c# enums constants switch-statement

嗨,我有一个简单的问题,但是一直困扰我一段时间。

问题:

在C#中使用switch语句时,最好使用enums而不是constants,反之亦然?或者这是一个偏好的问题?我之所以这样问,是因为很多人似乎都喜欢使用enums,但是当您启用int值时,必须将enum中包含的每个值转换为{{} 1}},即使您指定int的类型。

代码段:

enum

是否有某种方法可以创建class Program { enum UserChoices { MenuChoiceOne = 1, MenuChoiceTwo, MenuChoiceThree, MenuChoiceFour, MenuChoiceFive } static void Main() { Console.Write("Enter your choice: "); int someNum = int.Parse(Console.ReadLine()); switch (someNum) { case (int)UserChoices.MenuChoiceOne: Console.WriteLine("You picked the first choice!"); break; // etc. etc. } } } 的实例并将整个enum转换为int?

谢谢!

3 个答案:

答案 0 :(得分:10)

为什么不这样做?

UserChoices choice = (UserChoices)int.Parse(Console.ReadLine());

switch (choice)
{
    case UserChoices.MenuChoiceOne:
        // etc...

然后你只需要施放一次。

更新:修复了代码中的错误!

答案 1 :(得分:2)

我认为枚举对常量的偏好是因为可读性而不是因为性能。我发现在代码中读取枚举(通常而不仅仅是在switch语句中)比读取/理解常量及其用法更容易。

然后顺便说一下,你不必每个案例,你可以投你的开关。

switch((UserChoices)someEnum)
{
...

答案 2 :(得分:1)

我相信你可以做到:

switch((UserChoices)someNum)
{
     case UserChoices.MenuChoiceOne:
     break;
     default:
     throw Exception // whatever here
}