【问题标题】:int.Parse, Input string was not in a correct formatint.Parse,输入字符串的格式不正确
【发布时间】:2012-03-11 10:44:39
【问题描述】:

如何解析空字符串? int.Parse(Textbox1.text) 给我一个错误:

输入字符串的格式不正确。
System.FormatException:输入字符串的格式不正确。

如果文本为空 (Textbox1.text = ''),则会引发此错误。我了解此错误,但不知道如何更正。

【问题讨论】:

  • 你不会,在尝试解析之前检查字符串是否为空。 if(!string.IsNullOrEmpty(Textbox1.Text))。显然,如果字符串不是数字,这仍然会给你一个错误,所以向输入添加一些验证

标签: c#


【解决方案1】:

如果输入是数字或空字符串,这将起作用。如果字符串为空,则返回零,否则返回实际数字。

int.Parse("0"+Textbox1.Text)

【讨论】:

    【解决方案2】:

    如果您希望在空文本框上默认为 0(并在格式不佳的输入上引发异常):

    int i = string.IsNullOrEmpty(Textbox1.Text) ? 0 : int.Parse(Textbox1.Text);
    

    如果您希望任何格式不佳的输入默认为 0:

    int i;
    if (!int.TryParse(Textbox1.Text, out i)) i = 0;
    

    【讨论】:

    • 第二个代码 sn-p 表明 TryParse 在返回 false 时将保持先前的值不变,但会将其归零。最好写int i; if (!int.TryParse(Textbox1.Text, out i)) i = 0; 或有人认为以下内容会起作用int i = -1; int.TryParse(Textbox1.Text, out i);
    • out i - 如果未解析,它将被分配给0,因此零检查和分配是额外的。
    • 就个人而言,我更喜欢IsNullOrWhitespace
    【解决方案3】:

    嗯,你想要结果是什么?如果您只想验证输入,请改用int.TryParse

    int result;
    
    if (int.TryParse(Textbox1.Text, out result)) {
        // Valid input, do something with it.
    } else {
        // Not a number, do something else with it.
    }
    

    【讨论】:

      【解决方案4】:

      你也可以使用这样的扩展方法:

      public static int? ToNullableInt32(this string s)
      {
          int i;
          if (Int32.TryParse(s, out i)) return i;
          return null;
      }
      

      这是参考:How to parse a string into a nullable int in C# (.NET 3.5)

      【讨论】:

        【解决方案5】:

        试试这个:

        int number;
        if (int.TryParse(TextBox1.Text, out number))
        {
            //Some action if input string is correct
        }
        

        【讨论】:

          【解决方案6】:

          你可以用简单的try/catch...

          【讨论】:

          • 实现这一点的糟糕方法。始终验证输入 - 不要计划异常。
          • 这是一个有效的替代方案,但你应该清楚你只想要catch(System.FormatException)
          • @Umer - 我的意思是你不需要想太多,只需用它包装代码并继续你的生活......
          • @RobinVanPersi 同意,如果你找不到肮脏的解决方案,你就想不出更快的解决方案:)
          • @johnny:更好的措辞是“例外是在特殊情况下”之类的。无论如何,重点是:如果您可以在输入内容之前以直接的方式检查您的输入,那么就这样做。它读起来更好,有助于避免吞下您可能不打算吞下的异常。
          【解决方案7】:
          if(!String.IsNullOrEmpty(Textbox1.text))
              var number = int.Parse(Textbox1.text);
          

          甚至更好:

          int number;
          
          int.TryParse(Textbox1.Text, out number);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-04-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-23
            • 2013-08-22
            相关资源
            最近更新 更多