在C#中,当double为Null/空时,如何创建异常?
我正在用C#创建21点。当游戏开始时,我的代码要求用户“请下注”。但是,用户可能只需单击“回车”,应用程序就会崩溃。我试着破例:在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
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而不是DoubleDouble
只是Double
的别名,因此它们在C中是相同的double?
可以是double
或null
bet
是double
的类型,因此将其与空字符串进行比较甚至不会编译。感谢您的回答,但由于变量bet是双精度的,因此不可能将bet==“”
作为一个条件。不,double
也不能等于null
。此外,错误发生在转换过程中。ToDouble
甚至在将任何内容分配给bet
之前。请尝试Double而不是DoubleDouble
只是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
,或输入解析为双精度的值。