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