【问题标题】:Difference between Convert.ToDecimal(string) & Decimal.Parse(string)Convert.ToDecimal(string) 和 Decimal.Parse(string) 之间的区别
【发布时间】:2008-09-18 01:31:07
【问题描述】:

Convert.ToDecimal(string)Decimal.Parse(string) 在 C# 中的区别是什么?

在什么情况下你会使用其中一种?

它对性能有什么影响?

在两者之间进行选择时,我还应该考虑哪些其他因素?

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    要记住一个重要的区别:

    如果给定null 字符串,Convert.ToDecimal 将返回0

    如果您要解析的字符串是nulldecimal.Parse 将抛出一个ArgumentNullException

    【讨论】:

      【解决方案2】:

      来自bytes.com

      Convert 类旨在 转换范围广泛的类型,所以你 可以将更多类型转换为十进制 你可以使用 Decimal.Parse,它可以 只处理字符串。在另一 手 Decimal.Parse 允许您 指定一个 NumberStyle。

      十进制和十进制是别名, 是平等的。

      对于 Convert.ToDecimal(string), Decimal.Parse 在内部调用。

      Morten Wennevik [C# MVP]

      由于 Decimal.Parse 由 Convert.ToDecimal 在内部调用,如果您有极端性能要求,您可能希望坚持使用 Decimal.Parse,它将节省一个堆栈框架。

      【讨论】:

      • 当然,除非 Convert.ToDecimal 和/或 Decimal.Parse 在编译期间甚至在 JIT 期间内联。 IOW,~~性能~~
      【解决方案3】:

      您可能没有想到的一个因素是Decimal.TryParse 方法。如果Convert.ToDecimalParse 无法将字符串转换为正确的十进制格式,则它们都会抛出异常。 TryParse 方法为您提供了一个很好的输入验证模式。

      decimal result;
      if (decimal.TryParse("5.0", out result))
         ; // you have a valid decimal to do as you please, no exception.
      else
         ; // uh-oh.  error message time!
      

      这种模式非常适合检查用户输入的错误。

      【讨论】:

        【解决方案4】:

        与原始主题相关的一个常见建议 - 如果您不确定输入字符串参数是否是正确的数字格式表示,请立即使用TryParse()

        【讨论】:

          【解决方案5】:

          Convert.ToDecimal(string)Decimal.Parse(string) 之间的主要区别 是 Convert 处理 Null 而另一个抛出异常

          注意:它不会处理空字符串。

          【讨论】:

            【解决方案6】:

            Convert.ToDecimal 显然并不总是返回 0。在我的 linq 语句中

            var query = from c in dc.DataContext.vw_WebOrders
            select new CisStoreData()
            {
                   Discount = Convert.ToDecimal(c.Discount)
            };
            

            从小数转换后折扣仍然为空?那是空的。但是,在 Linq 语句之外,对于相同的转换,我确实得到了 0。令人沮丧和烦人。

            【讨论】:

              【解决方案7】:

              知道 Convert.ToDecimal 在大多数情况下是可行的方法,因为它可以处理 NULL,但是它不能很好地处理空字符串。因此,以下功能可能会有所帮助:

              'object should be a string or a number
              Function ConvertStringToDecimal(ByVal ValueToConvertToDecimal As Object) As Decimal
                  If String.IsNullOrEmpty(ValueToConvertToDecimal.ToString) = False Then
                      Return Convert.ToDecimal(ValueToConvertToDecimal)
                  Else
                      Return Convert.ToDecimal(0)
                  End If
              End Function
              

              【讨论】:

                猜你喜欢
                • 2019-11-29
                • 1970-01-01
                • 2013-06-25
                • 1970-01-01
                • 2012-03-04
                • 2017-08-24
                • 2019-11-12
                • 1970-01-01
                • 2011-07-19
                相关资源
                最近更新 更多