C# 如何在try-catch语句中重新请求输入

C# 如何在try-catch语句中重新请求输入,c#,C#,如您所见,我请求输入,但如果用户输入非整数答案,如字母“f”,catch语句将捕获它,但随后再次抛出异常,因为变量“l”仍然等于“f”。帮助?不要那样做。改用胰蛋白酶 string l = Console.ReadLine(); try { int.Parse(l); } catch (FormatException) { Console.WriteLine("Invalid input. Please enter 1, 2, or 3."); } 您可以使用而不是捕获异常。

如您所见,我请求输入,但如果用户输入非整数答案,如字母“f”,catch语句将捕获它,但随后再次抛出异常,因为变量“l”仍然等于“f”。帮助?

不要那样做。改用胰蛋白酶

string l = Console.ReadLine();

try
{
    int.Parse(l);
}
catch (FormatException)
{
    Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
}
您可以使用而不是捕获异常。它返回解析是否成功,因此您可以在循环中检查它,直到输入有效

        string l = Console.ReadLine();

        int i;

        while(int.TryParse(l, out i) == false)
        {
            Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
            l = Console.ReadLine();
        }

有多种方法可以处理这个问题。一种方法是将所有这些都封装在一个循环中,允许给定的重试次数,或者只是一个while循环,直到用户输入有效的输入。另一种方法是将其全部放在一个方法中,并从catch块递归调用它。我认为最好的解决方案是两者都不是,相反,我会使用
Int.TryParse
,我会在while循环中使用它

int i;
bool valid = false;
do {
    Console.WriteLine("Enter an int: ");
    string input = Console.ReadLine();
    valid = int.TryParse(input, out i);
} while(! valid);

//use i

您需要将TryParse与while循环一起使用(因为您的条件可能会失败无数次)


似乎在开始使用try-catch之前,您应该先了解循环是什么。@SpikeX我个人认为
!int.TryParse(l,out i)
看起来太像
int.TryParse(l,out i)
它提高了me@ChaosPandion您的IDE应该负责传递类型信息,而不是您的代码。@SpikeX-我是在挖苦。@哦,对不起,您忘了使用
标记,所以我不知道。;)如果在循环条件中嵌入
TryCatch
,则无需为此声明额外的
bool
字段。
 while (!Int32.TryParse(input, out line))
 {
      Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
      input = Console.ReadLine();
 }
string l = Console.ReadLine();

int line = 0;

while(!int.TryParse(l, out line))
{
    Console.WriteLine("Try again.");
    l = Console.ReadLine();
}

// line contains a valid number here.