【问题标题】:Format exception unhandled: input string was not in a correct format未处理的格式异常:输入字符串的格式不正确
【发布时间】:2017-07-06 00:14:26
【问题描述】:

当我尝试运行我的程序时,编译器会给我一个错误Input string was not in a correct format.

我的代码:

public int number;
public int evenOrOdd()
        {
            if(number % 2 == 0)
            {
                return int.Parse(number+" is a even number");
            }
            else
            {
                return int.Parse(number + " is a oddnumber");
            }
        }

private void checkerButton_Click(object sender, EventArgs e)
        {
            pali = new Palindrome() { number = int.Parse(checkerBox.Text) };
            checkerLabel.Text = pali.evenOrOdd().ToString();
        }

【问题讨论】:

  • return int.Parse(number+" is a even number"); 是问题所在。您正在尝试将字符串解析为数字。您应该从该方法返回字符串并使用return number+" is a even number"
  • 请在您的代码示例中包含number 的声明,并告诉我们您是如何设置它的。
  • @ChetanRanpariya 返回
  • int.Parse(number+" is a even number") 是你的问题。 int.Parse 方法将参数转换为 int 值。您传递给 Parse 方法的字符串无法转换为 int。

标签: c# class converter


【解决方案1】:

似乎有几个问题:

一个只是设计/使用问题:您有一个名为“evenOrOdd”的方法,它返回一个int。如果你有一个名为“IsEven”(或“IsOdd”)的方法返回一个布尔值,或者一个名为“GetEvenOrOddMessage”的方法返回一个字符串,那会更有意义。

另一个是您正在尝试将非数字字符串转换为整数(您的 int.Parse 方法将因非数字字符串值而失败)。

大概您想要一个在数字是偶数或奇数时返回消息字符串的方法,因此您无需尝试将任何内容转换为 int,而是转换为字符串。

所以我们可以创建一个返回我们想要的消息的方法,给一些数字输入:

public string GetEvenOrOddMessage()
{
    if (number % 2 == 0)
    {
        return (number + " is an even number");
    }
    else
    {
        return (number + " is an odd number");
    }
}

现在,要测试字符串是否确实是整数,我们可以使用int.TryParse,如果解析成功则返回true,并将out参数设置为值。

private void checkerButton_Click(object sender, EventArgs e)
{
    int input;
    if (int.TryParse(checkerBox.Text, out input))
    {
        pali = new Palindrome() { number = input };
        checkerLabel.Text = pali.GetEvenOrOddMessage();
    }
    else
    {
        // Do something if the input string is not a number
    }
}

【讨论】:

    【解决方案2】:

    如果输入字符串不能转换为数字,int.Parse 会抛出异常。

    您应该使用int.TryParse

    int parsed = 0;
    if (int.TryParse(checkerBox.Text, out parsed))
    {
        pali = new Palindrome() { number = parsed};
    } else {
        // show an error and exit the method.
        return;
    }
    

    【讨论】:

      【解决方案3】:

      使用 int.parse 只解析您要转换的数据。注意 int.parse 的返回值将是整数。所以字母和字符会触发不正确的格式。例如。 正确 - int.parse("2") 不正确 - int.parse("2a")

      公共整数;

      if(number % 2 == 0)
      {
      return int.Parse(number) + "is a even number";
      }
      else
      {
      return int.Parse(number) + "is a odd number";
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多