2012-01-08 69 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