异常处理C# - 如何只接受数字1-5,没有字符串

时间:2013-05-02 21:50:37

标签: c#

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

6 个答案:

答案 0 :(得分:2)

这不是您应该使用例外的类型。只需使用if语句,并告诉用户再试一次

int num;
if(int.TryParse(userInput, out num) == false || num> 5 || num< 1)
{
    ShowError("don't do that");
}

答案 1 :(得分:1)

我不会使用异常处理来执行此操作。这听起来更像是验证的东西。如果这是针对网络,请查看RangeValidator。如果你真的想抛出异常,那么你可以这样做:

if(myValue < 1 || myValue > 5)
{
   Throw new System.Exception("Out of range!");
}

答案 2 :(得分: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;
    }

答案 3 :(得分:0)

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

答案 4 :(得分:0)

不要使用Exception来处理代码流,除非您希望突然停止当前流程并与代码的上层通信,这需要由“特殊”情况解决。调用代码。

在您的情况下,一个简单的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!");

    }

}

答案 5 :(得分:0)

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

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

if (regex.IsMatch(compare))
{ 
   //true
}
else
 MessageBox.Show("ERROR");