2012-03-05 3 views
1

проблема у меня в том, чтобы подтвердить ввод означает, поместив его в попытке поймать, который затем обыкновение передать переменную через, и я получаю эту ошибку:Как проверить нулевой вход

Использование Unassigned местного переменная «MainMenuSelection»

Я подтверждено, используя этот метод раньше, но по какой-то причине он не работает сейчас, пожалуйста, помогите

//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. Попробуйте использовать метод 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 
} 
Смежные вопросы