2012-01-08 16 views
1

switch文のオプションとしてenumを使用しています。問題は、ユーザーが無効なオプションを入力してプログラムがクラッシュした場合です。デフォルトを使用するように追加する必要はありますか?列挙型プログラムがクラッシュで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 

。代わりにEnum.Parse使用Enum.TryParse

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

        case Options.Toggle://toggle 

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

あなたは、ランタイムエラーのどのような種類を得るのですか? – dasblinkenlight

答えて

2

方法について:

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

ありがとう、enumsで働いている私のための新しいです。私はなぜ列挙解析がオプションであるのだろう、tryparseはより理にかなっているのだろうか。 – Aaron

+0

@アーロン第一に、「アウトT」はジェネリックスなしでは不可能でした。第2に、文字列**を有効な列挙型にする必要があると主張する場合は、Parseは完全に正しいです。 –

5

...これは、テキストが、あなたの列挙型に変換できるかどうか言うことはブール値を返します。それが本当であれば、そうでなければ無効な文字列を入力したことをユーザーに知らせます。

0

Enum.TryParse(...)を見ると、無効な文字列をチェックできます。代わりに

4

使用Enum.TryParse

Options options; 

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

サンプルコードが正確ではないと思います。 – Steve

+0

@Steve:それを指摘してくれてありがとう。 – Ryan

+1

私はまだそれが正確だとは思わない。 – Steve

関連する問題