C# 捕获异常后如何返回到第一个输入?
我有两次尝试接球,但在第一次接球之后C# 捕获异常后如何返回到第一个输入?,c#,C#,我有两次尝试接球,但在第一次接球之后 do { Console.Write("x = "); string str = Console.ReadLine(); if (str.ToLower().Equals("exit")) { Console.WriteLine("Program has stopped"); break; } else {
do
{
Console.Write("x = ");
string str = Console.ReadLine();
if (str.ToLower().Equals("exit"))
{
Console.WriteLine("Program has stopped");
break;
}
else
{
try
{
x = Convert.ToInt32(str);
Console.Write("y = ");
y = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("Input Int or type 'exit' to stop program");
}
}
如果它捕捉到了,那么它将转到代码的其余部分。如何在捕获后返回以再次输入另一个值
try
{
Console.WriteLine("Do you want to Add, Subtract, Multiply, or Divide ?");
f = Console.ReadLine();
}
catch (ArgumentException)
{
Console.WriteLine("Cannot read string");
}
if (f.ToLower().Equals("add"))
{
sum = x + y;
Console.WriteLine("Result: {0}", sum);
while (true);
虽然您不应该使用异常进行流控制,而TryParse是处理流的更好方法,但要回答您的问题: 您可以对每个输入使用while循环,如果输入经过验证,则将其条件设置为false。 比如: 另一种方法是创建一个获取输入的方法:
private string GetUserInput(string message, string errorMessage)
{
Console.WriteLine(message)
var input = Console.ReadLine();
if (!input.ToLower().Equals("exit") && !input.TryParse(str))
input = GetUserInput(errorMessage + message, "");
return input;
}
不要将异常用于流控制。使用而不是转换。简单地说,使用Int32.TryParse并摆脱异常处理程序。使用
int.TryParse
而不是Convert.ToInt32
,这样您就可以自己验证输入,而不是捕获异常。此外,第二个示例也不太可能出现。ArgumentException
(特别是ArgumentOutOfRangeException
)仅由控制台引发。如果输入超过2147483647
个字符,则ReadLine
。“如何在捕获后再次输入另一个值”--要返回到代码已经到达的位置,需要一个循环语句,例如而。有关示例,请参见副本。如果将处理数字输入的部分放入一个单独的方法中,您可能会发现代码更易于编写和读取,您可以将该方法重新用于任何输入。
private string GetUserInput(string message, string errorMessage)
{
Console.WriteLine(message)
var input = Console.ReadLine();
if (!input.ToLower().Equals("exit") && !input.TryParse(str))
input = GetUserInput(errorMessage + message, "");
return input;
}