【问题标题】:C# - How can I create an exception for non-numeric on this code?C# - 如何在此代码上为非数字创建异常?
【发布时间】:2016-04-01 20:55:09
【问题描述】:

我想创建一个异常,当我键入非数字字符时,最好使用此代码中的 Try/catch。我尝试使用 int.TryParse,但是当我使用非数字字符时,这只返回 0。但不要显示任何错误消息,但使用 int.Parse (Console.ReadLine) 我收到错误消息:

输入字符串的格式不正确。

代码

while (true)
{         
    Console.WriteLine("TYPE A NUMBER HIGHER THAN 20: ");
    int number;
    number = int.Parse(Console.ReadLine());
    if (number> 20)
    {
        Console.WriteLine("O NÚMERO DIGITADO FOI: " + number);
        break;
    }

    else
    {
        Console.WriteLine(number+ " é menor do que 20, favor digitar um número maior");

    }              
}    
Console.ReadLine();

【问题讨论】:

  • 如您所知,已经抛出了一个非数字异常,即 FormatException。为什么要重新抛出它?

标签: c# exception-handling int


【解决方案1】:

您应该尝试使用 Int32.TryParse(而不是 Parse)来处理输入,而不是抛出异常:

bool run = true;
while (run)
{
    Console.Write("Type in a number: ");
    string input = Console.ReadLine();

    //Exit application
    if(input == "exit")
    {
        run = false;
        return;
    }

    //Returns true if numberStr can be parsed to an int
    int number;
    if (Int32.TryParse(input, out number))
    {
        //input is a number, now let's do some logic!
        if(number > 20)
            Console.WriteLine("Number is greater than 20!");
        else
            Console.WriteLine("Number is less than 20!");
    }
    else
        Console.WriteLine("Doesn't seem to be a number: " + number);

}

Console.ReadLine();

【讨论】:

  • 但是条件语句呢?高于还是低于“x”值?带有 int.TryParse 的非数字字符只返回 0 值。
  • 我只是稍微修改了答案。 TryParse 返回一个布尔值(true 或 false),如果它返回 true(即它是一个数字),它将进入块并验证该数字是否大于 20。
【解决方案2】:

你可以像这样创建一个异常:

Console.WriteLine("Type a number: ");
string line = Console.ReadLine();
    try {
        num = Int32.Parse(line);
    } 
    catch (FormatException) {
        Console.WriteLine("{0} is not an integer", line);
    }

或者你可以使用int.TryParse,就像你提到的那样:

Console.WriteLine("Type a number: ");
string line = Console.ReadLine();
if (!int.TryParse(line, out num)) {
    Console.WriteLine("{0} is not an integer", line);
}

【讨论】:

    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多