【问题标题】:Int32.TryParse() returns zero on failure - success or failure?Int32.TryParse() 在失败时返回零 - 成功还是失败?
【发布时间】:2010-12-29 08:53:16
【问题描述】:

我从 msdn 读到这篇关于 Int32.TryParse() 的文章

当这个方法返回时,包含 等效的 32 位有符号整数值 到 s 中包含的数字,如果 转换成功,如果 转换失败。

但是如果传递的字符串本身是 '0' 的字符串表示会发生什么。所以TryParse 将返回零。怎么知道是成功还是失败?

【问题讨论】:

    标签: c# .net int


    【解决方案1】:

    否,TryParse 返回 true 或 false 表示成功。 out 参数的值用于解析值,或 0 表示失败。所以:

    int value;
    if (Int32.TryParse(someText, out value))
    {
        // Parse successful. value can be any integer
    }
    else
    {
        // Parse failed. value will be 0.
    }
    

    所以如果你传入“0”,它将执行第一个块,而如果你传入“坏数字”,它将执行第二个块。

    【讨论】:

    • 天哪!我的错。我应该在编程时关闭 SO。在这里发帖太容易了:)。
    • 你在 if 结尾遗漏了 )
    【解决方案2】:

    该方法返回一个指示成功或失败的布尔值。用那个。整数是传入方法的引用参数,与方法的返回值无关。

    这是来自documentationInt32.TryParse() 的原型。很明显,它返回一个布尔值。第二个参数是out int,表示该参数是通过引用传递的,所以它会被方法改变。

    public static bool TryParse(
        string s,
        out int result
    )
    

    所以要检查成功或失败,请执行以下操作:

    int value;
    
    if (Int32.TryParse("0", out value))
        Console.WriteLine("Parsed as " + value);
    else
        Console.WriteLine("Could not parse");
    

    【讨论】:

      【解决方案3】:

      Int32.TryParse() 方法返回一个boolean 值作为返回值,并将转换后的值作为输出参数提供。因此,您可以检查状态的返回 boolean 值。

      private static void TryToParse(string value)
         {
            int number;
            bool result = Int32.TryParse(value, out number);
            if (result)
            {
               Console.WriteLine("Converted '{0}' to {1}.", value, number);         
            }
            else
            {
               if (value == null) value = ""; 
               Console.WriteLine("Attempted conversion of '{0}' failed.", value);
            }
         }
      

      【讨论】:

        【解决方案4】:

        TryParse() 返回一个布尔值。

                Int32 testInt;
        
                if (!Int32.TryParse("123", out testInt))
                {
                    MessageBox.Show("Is not a Int32!");
                    return; // abbrechen
                }
        
                MessageBox.Show("The parst Int32-value is " + testInt);
        

        【讨论】:

          【解决方案5】:

          现在使用 C# 7,您可以在 TryParse 中声明变量,如 ...

          if (Int32.TryParse(someText, out int value))
          {
             // Parse successful. value can be any integer
          }
          else
          {
             // Parse failed. value will be 0.
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多