Как создать исключение, когда двойное значение Null / Empty в C#? - PullRequest
0 голосов
/ 19 июня 2020

Я создаю блэкджек в C#. Когда игра начинается, мой код просит пользователя: «Пожалуйста, сделайте ставку». Однако пользователь может просто нажать «Enter», и приложение выдаст sh. Я попытался сделать исключение:

  Console.WriteLine("Please, make a bet");
        bet = Convert.ToDouble(Console.ReadLine());
        try
        {
            bet = 0;
        }
        catch (System.FormatException)
        {
            Console.WriteLine("You have to bet in order to play");
        }
        catch (Exception e)
        {
            Console.WriteLine("You have to bet in order to play");
        }

Однако, похоже, это не работает, и все же мое приложение вылетает. Переменная ставки является двойной, поэтому я не могу использовать if(double.IsNullOrEmpty(bet)){//Something}; так же, как если бы это была строка. double.IsNan(bet) тоже не работает как условие. Итак, как мне сделать исключение, когда двойное значение равно нулю / пусто?

Ответы [ 3 ]

2 голосов
/ 19 июня 2020

Строка, которая вызывает исключение, в данном случае bet = Convert.ToDouble(Console.ReadLine()) должна находиться внутри блока try, чтобы исключение было перехвачено.

try
{
   bet = Convert.ToDouble(Console.ReadLine());
}
catch (System.FormatException)
{
   Console.WriteLine("You have to make a bet.");
}
catch (Exception)
{
   Console.WriteLine("You have to make a bet.");
}

В качестве альтернативы вы можете использовать Double.TryParse для анализа ввода пользователя.

Может быть что-то вроде ...

Console.WriteLine("Enter your bet.");
while (!Double.TryParse(Console.ReadLine(), out bet))
{
   Console.WriteLine("You have to make a bet.");
}
1 голос
/ 19 июня 2020

Лучше не использовать исключения (которые предназначены для исключительного поведения) здесь, а TryParse:

  Console.WriteLine("Please, make a bet");

  // keep asking user while
  //  1. bet is not a valid floating point
  //  2. bet is negative
  //  3. bet is too high 
  while (!double.TryParse(Console.ReadLine(), out bet) || bet < 0 || bet > 1e100) {
    Console.WriteLine("You have to make a bet.");
  }

  // from now on bet is a valid double value in [0..1e100] range
0 голосов
/ 19 июня 2020

Вы не проверяете, является ли значение null или нет

if(bet == null){
Console.WriteLine("You have to make a bet");
}else{
Console.WriteLine("That");
}
...