Как проверить нулевой ввод - PullRequest
1 голос
/ 05 марта 2012

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

Использование неназначенной локальной переменной '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

Ответы [ 3 ]

1 голос
/ 05 марта 2012

Лучшим способом было бы использовать byte.TryParse().Это сделано специально для этих типов сценариев.

byte b;
if (byte.TryParse("1", out b))
{
    //do something with b
}
else
{
    //can't be parsed
}
1 голос
/ 05 марта 2012

Очевидно, что пользователь может ввести все, что не будет проанализировано как один 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 голосов
/ 05 марта 2012

Если вас беспокоит только сам ввод, вы можете использовать метод Byte.TryParse , а затем обработать ложный логический регистр.

byte mainMenuSelection;
if (Byte.TryParse(Console.ReadLine(), out mainMenuSelection)
{
    switch(mainMenuSelection);
}
else
{
    Console.WriteLine("Please enter a valid selection");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...