在C#中,当double为Null/空时,如何创建异常?

在C#中,当double为Null/空时,如何创建异常?,c#,double,C#,Double,我正在用C#创建21点。当游戏开始时,我的代码要求用户“请下注”。但是,用户可能只需单击“回车”,应用程序就会崩溃。我试着破例: Console.WriteLine("Please, make a bet"); bet = Convert.ToDouble(Console.ReadLine()); try { bet = 0; } catch (System.FormatException

我正在用C#创建21点。当游戏开始时,我的代码要求用户“请下注”。但是,用户可能只需单击“回车”,应用程序就会崩溃。我试着破例:

  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");
        }

然而,它似乎不起作用,我的应用程序也崩溃了。bet变量是一个double,因此我不能使用
if(double.IsNullOrEmpty(bet)){//Something}与如果它是字符串时相同
double.IsNan(bet)
也不作为条件。那么,当double为null/empty时,如何创建异常

您没有检查是否为null

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

您没有检查是否为null

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

引发异常的行(在本例中为
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.");
}
或者,您可以使用解析用户的输入

也许像

Console.WriteLine("Enter your bet.");
while (!Double.TryParse(Console.ReadLine(), out bet))
{
   Console.WriteLine("You have to make a bet.");
}

引发异常的行(在本例中为
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.");
}
或者,您可以使用解析用户的输入

也许像

Console.WriteLine("Enter your bet.");
while (!Double.TryParse(Console.ReadLine(), out bet))
{
   Console.WriteLine("You have to make a bet.");
}
这里最好不要使用异常(用于异常行为),而是
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
Console.WriteLine(“请打赌”);
//继续询问用户
//  1. 下注不是有效的浮点
//  2. 赌注是负的
//  3. 赌注太高了
而(!double.TryParse(Console.ReadLine(),out bet)| | bet<0 | | bet>1e100){
WriteLine(“你必须打赌。”);
}
//从现在起,赌注是[0..1e100]范围内的有效双倍值
这里最好不要使用异常(用于异常行为),而是
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
Console.WriteLine(“请打赌”);
//继续询问用户
//  1. 下注不是有效的浮点
//  2. 赌注是负的
//  3. 赌注太高了
而(!double.TryParse(Console.ReadLine(),out bet)| | bet<0 | | bet>1e100){
WriteLine(“你必须打赌。”);
}
//从现在起,赌注是[0..1e100]范围内的有效双倍值


您需要使用
double.TryParse
来确定他们是否没有输入任何内容,或者输入的值是否不是数字。或者捕获
控制台的结果。ReadLine
并在尝试转换之前检查它是什么。不要使用异常来控制程序流-错误的用户输入没有任何异常。您需要使用
double.TryParse
来确定他们是否没有输入任何内容或输入的值是否不是数字。或者捕获
控制台的结果。读取行
并在尝试转换它之前检查它是什么。不要使用异常来控制程序流-错误的用户输入没有任何异常
打赌
是一个
双倍
,因此将其与空字符串进行比较甚至不会编译。感谢您的回答,但是由于变量bet是双精度的,所以不可能将
bet==“”
作为一个条件。不,双精度
也不能等于
null
。此外,错误发生在
转换过程中。ToDouble
甚至在将任何内容分配给
bet
之前。请尝试Double而不是Double
Double
只是
Double
的别名,因此它们在C中是相同的
double?
可以是
double
null
bet
double
的类型,因此将其与空字符串进行比较甚至不会编译。感谢您的回答,但由于变量bet是双精度的,因此不可能将
bet==“”
作为一个条件。不,
double
也不能等于
null
。此外,错误发生在
转换过程中。ToDouble
甚至在将任何内容分配给
bet
之前。请尝试Double而不是Double
Double
只是
Double
的别名,因此它们在C中是相同的
double?
可以是
double
null
类型。您还可以解释一下第二个代码的作用吗?谢谢。
Double.TryParse
只需获取一个
字符串
,并尝试将其解析为
Double
。如果成功,它将返回
true
,解析后的值将放入作为第二个参数传入的
out
参数中。
while
循环将继续执行,直到
double.TryParse
成功,这样用户将不断要求下注,直到他们输入解析为
double
的值。请注意,一旦到达该循环,您将无法在不中断的情况下退出程序,例如,
CTRL+C
,或输入解析为
双精度的值。您还可以解释第二个代码的作用吗?谢谢。
Double.TryParse
只需获取一个
字符串
,并尝试将其解析为
Double
。如果成功,它将返回
true
,解析后的值将放入作为第二个参数传入的
out
参数中。
while
循环将继续执行,直到
double.TryParse
成功,这样用户将不断要求下注,直到他们输入解析为
double
的值。请注意,一旦到达该循环,您将无法在不中断的情况下退出程序,例如,
CTRL+C
,或输入解析为
双精度的值。