2012-01-08 70 views
1

我使用enum作为switch语句的选项,并且它可以工作。问题是如果用户输入一个无效的选项程序崩溃。我应该添加什么,以便使用默认值?使用enum和switch语句c#

我枚举类

public enum Options : byte 
    { 
     Display = 1, 
     Add, 
     Toggle, 
     Max, 
     Mean, 
     Medium, 
     Exit 
    } 

在枚举程序崩溃主我switch语句

string volString = Console.ReadLine(); 
    Options options = (Options)Enum.Parse(typeof(Options), volString); 
    // this is the line that is giving me the runtime error. Since other options are not found 

   switch (options) 
       { 
        case Options.Display: //dispaly regular time 

        case Options.Toggle://toggle 

        default: 
         Console.WriteLine("entry blah blah"); 
         break; 
+2

你会得到什么样的运行时错误的? – dasblinkenlight 2012-01-08 00:12:01

回答

2

如何:

Options value; 
if(!Enum.TryParse(volString, out value)) // note implicit <Options> 
    value = Options.SomeDefaultValue; 
+0

谢谢,使用枚举对我来说是新的。我想知道为什么enum parse是一个选项,tryparse更有意义。 – Aaron 2012-01-08 00:33:44

+0

@Aaron首先,没有泛型,“out T”是不可能的,所以直到.net 2;其次,如果你想断言字符串**应该是一个有效的枚举,那么解析是完全正确的。 – 2012-01-08 09:33:55

5

代替Enum.Parse使用Enum.TryParse ......这将返回一个布尔说,如果可以将文本转换成你的枚举。如果确实如此,请运行您的交换机,否则通知用户他们输入的字符串无效。

0

看看Enum.TryParse(...)你可以用它来检查无效的字符串。

4

使用Enum.TryParse代替:

Options options; 

if(!Enum.TryParse(volString, out options)) { 
    // It wasn't valid input. 
} 
+1

我不认为你的示例代码是准确的。 – Steve 2012-01-08 00:16:24

+0

@Steve:哎呀,谢谢你指出。 – Ryan 2012-01-08 00:17:49

+1

我仍然认为它不准确。 – Steve 2012-01-08 00:19:07