2012-03-05 4 views
1

はその後、文句を言わないを通じて変数を渡したトライキャッチでそれを置くことを意味し、私はこのエラーになってるヌル入力を検証する方法:未割り当てのローカルの私がいる問題は、入力を検証することです

使用を私は前にそれは今働いていない何らかの理由で、この方法を使って検証しまし変数「MainMenuSelection」

は、ユーザーのシングルbyteとして解析されない何も入力することができます明らかに

//Take the menu selection 
try 
{ 
    mainMenuSelection = byte.Parse(Console.ReadLine()); 
} 
catch 
{ 
    Console.WriteLine("Please enter a valid selection"); 
} 


switch (mainMenuSelection) //Where error is shown 
+0

mainMenuSelectionの定義を表示できますか? – BigOmega

+1

例外タイプを指定せずに 'catch'を書くべきではありません。遅かれ早かれあなたを噛む悪い習慣です。 – phoog

答えて

1

を助けてください。例外を生成せず、単にステータスフラグを返すメソッドByte.TryParse()を使って試してください。

あなたはさらに行くと、必要に応じてユーザー入力のためのより多くの分析を追加することができます。

// Initialize by a default value to avoid 
// "Use of unassigned local variable 'MainMenuSelection'" error 
byte mainMenuSelection = 0x00;  
string input = Console.ReadLine(); 

// If acceptable - remove possible spaces at the start and the end of a string 
input = input.Trim(); 
if (input.Lenght > 1) 
{ 
    // can you do anything if user entered multiple characters? 
} 
else 
{ 
    if (!byte.TryParse(input, out mainMenuSelection)) 
    { 
     // parsing error 
    } 
    else 
    { 
     // ok, do switch 
    } 
} 

はまた、おそらくあなただけの単一の文字ではないバイトが必要ですか? は、それからちょうど行います

// Character with code 0x00 would be a default value. 
// and indicate that nothing was read/parsed  
string input = Console.ReadLine(); 
char mainMenuSelection = input.Length > 0 ? input[0] : 0x00; 
+0

更新を参照して、更新しました – sll

0

あなたが入力そのものについてだけで気になる場合、あなたはByte.TryParse Methodを使用して、代わりに偽のブールケースを扱うことができます。

byte mainMenuSelection; 
if (Byte.TryParse(Console.ReadLine(), out mainMenuSelection) 
{ 
    switch(mainMenuSelection); 
} 
else 
{ 
    Console.WriteLine("Please enter a valid selection"); 
} 
1

より良い方法はbyte.TryParse()を使用することです。これは、これらのタイプのシナリオに特化して作成されています。

byte b; 
if (byte.TryParse("1", out b)) 
{ 
    //do something with b 
} 
else 
{ 
    //can't be parsed 
} 
関連する問題