c#尝试捕捉/错误处理
我目前正在做一个程序,我正在通过错误处理来完成它。我有几个案例看起来像:c#尝试捕捉/错误处理,c#,error-handling,C#,Error Handling,我目前正在做一个程序,我正在通过错误处理来完成它。我有几个案例看起来像: int stockbankInput = Convert.ToInt32(Console.ReadLine()); 在这里,用户必须输入1、2、3。我曾尝试使用if语句捕捉错误,如果有人输入空格/字符串/字符或不是1、2或3的数字,但其工作原理与字符串输入不同。以下是我尝试过的: if(stockbankInput == null) { Console.WriteLine("Error: Please enter
int stockbankInput = Convert.ToInt32(Console.ReadLine());
在这里,用户必须输入1、2、3。我曾尝试使用if语句捕捉错误,如果有人输入空格/字符串/字符或不是1、2或3的数字,但其工作原理与字符串输入不同。以下是我尝试过的:
if(stockbankInput == null)
{
Console.WriteLine("Error: Please enter either 1, 2 or 3");
stockbankInput = 0;
goto menuRestartLine;
}
但是,不能将“null”链接到整数输入,只能链接到字符串。有人能帮忙吗?使用Int32 TryParse方法:
int input;
var successful = Int32.TryParse(Console.ReadLine(), out input);
if (!successful)
// do something else
else
return input;
尝试一下此示例程序:
static void Main(string[] args)
{
int stockbankInput = 0;
bool firstTry = true;
while(stockbankInput < 1 | stockbankInput > 3)
{
if(!firstTry)
Console.WriteLine("Error: Please enter either 1, 2 or 3");
firstTry = false;
Int32.TryParse(Console.ReadLine(), out stockbankInput);
}
}
static void Main(字符串[]args)
{
int stockbankInput=0;
bool firstTry=true;
而(stockbankInput<1 | stockbankInput>3)
{
如果(!首次尝试)
Console.WriteLine(“错误:请输入1、2或3”);
firstTry=false;
Int32.TryParse(Console.ReadLine(),out stockbankInput);
}
}
首先,不要使用goto语句。他们被认为是不好的做法,阅读你的问题时,这就像是一盏耀眼的红灯——这就是我所能关注的
根据您的问题,int
或Int32
不能为空。所以你不能将它与null进行比较。给它一个默认值,然后检查它
这是一个不需要检查错误,只需要验证输入的场景。使用TryParse
,如果解析成功,它将设置out
参数,或者将其设置为0
接下来,您希望循环,直到获得良好的输入。如果执行一次
语句,循环将保证当您离开它时,您的输入将是有效的
最后,
firstTry
是一种很好的方法,可以让用户在第一次尝试后知道他们搞砸了。您正在检查int是否为null,这将始终返回false,因为int不能为null
可以使用“int”(可为null的int),但Convert.ToInt32不会返回null。如果无法解析int的值,它将解析为默认值零。您可以检查返回的int是否为零,也可以进一步检查返回的字符串:
int input = 0;
string errorMessage = "Error: Please enter either 1, 2 or 3";
while(true)
{
try
{
input = Convert.ToInt32(Console.ReadLine());
if (input == 0 || input > 3)
{
Console.WriteLine(errorMessage);
}
else
{
break;
}
}
catch(FormatException)
{
Console.WriteLine(errorMessage);
}
}
这样,您的返回值“int input”将为0,或者您输入的数字以及由要转换的字符串(包含数字0-9以外的符号)引起的格式异常将被捕捉到try/catch语句中。您不能在输出位置使用可为null的int。它必须是一个整数。啊,我错了。我已经修改了我的答案以反映实际的类型。谢谢。只是出于好奇,你为什么要使用
goto
语句。。?这将成为调试噩梦,仅供参考…为了避免goto语句(如@MethodMan所示),您可以从下面稍微修改我的答案,并在一段时间内将其包装(!successful){}谢谢!这是一个绝妙的答案,正是我所需要的:)