0

所以我对如何进行异常处理有点困惑。我创建的这个菜单有 5 个选项,因此用户输入数字 1-5。当用户输入大于 5 的字符串或数字时,我需要创建一个异常处理程序。有什么提示吗?谢谢。

4

6 回答 6

2

这不是您应该使用异常的类型。只需使用 if 语句,然后告诉用户再试一次

int num;
if(int.TryParse(userInput, out num) == false || num> 5 || num< 1)
{
    ShowError("don't do that");
}
于 2013-05-02T21:53:29.637 回答
1

我不会使用异常处理来做到这一点。这听起来更像是一种验证。如果这是用于 web的,请查看RangeValidator 。如果您真的想抛出异常,那么您可以执行以下操作:

if(myValue < 1 || myValue > 5)
{
   Throw new System.Exception("Out of range!");
}
于 2013-05-02T21:53:59.073 回答
0

使用正则表达式:正则表达式类 (System.Text.RegularExpressions)

Regex regex = new Regex(@"^[1-5]*$");

if (regex.IsMatch(compare))
{ 
   //true
}
else
 MessageBox.Show("ERROR");
于 2013-05-02T22:13:18.480 回答
0

这样做的方法是有一个while循环,直到用户输入正确的值。

只是一个简单的例子。这是假设您正在谈论的菜单是控制台菜单。

    int userInput = -1;
    while (true){
      Console.WriteLine("Input value:");
      try{
        userInput = Int.Parse(Console.ReadLine());
        if (userInput <1 || userInput >5){
          throw new Exception();
        }
      }
      catch{
        Console.WriteLine("Invalid input");
        continue;
      }
      break;
    }
于 2013-05-02T21:53:46.057 回答
0

如果确实需要,可以使用正则表达式来验证输入。我不会抛出异常,因为这并不是异常处理的真正目的

于 2013-05-02T21:57:17.903 回答
0

不要使用 anException来处理代码流,除非您希望突然停止当前流并与代码的上层沟通需要由调用代码解决的“异常”情况。

在您的情况下,一个简单的Int32.TryParse将解决您的问题。假设您的应用程序是控制台应用程序,您可以编写类似这样的代码

public static void Main(string[] args)
{
    DisplayMenu();
    while(true)
    {
        int menuChoice;
        string userInput = Console.Readline();
        if(Int32.TryParse(userInput, out menuChoice))
        {
            if(menuChoice >= 1 && menuChoice <= 5)
               RunCommand(menuChoice);
            else
               Console.WriteLine("Enter a number between 1-5");
        }
        else
            Console.WriteLine("A number between 1-5 is required!");

    }

}
于 2013-05-02T22:01:54.837 回答