Convert.ToDecimal(string)& Decimal.Parse(串)

时间:2008-09-18 01:31:08

标签: c# .net

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

在什么情况下你会使用一个而不是另一个?

它对绩效有何影响?

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

7 个答案:

答案 0 :(得分:45)

要记住一个重要的区别:

Convert.ToDecimal如果获得0字符串,则会返回null

如果您要解析的字符串为decimal.Parse,则

ArgumentNullException会抛出null

答案 1 :(得分:39)

来自bytes.com

  

Convert类旨在   转换各种类型,所以你   可以将更多类型转换为Decimal   你可以使用Decimal.Parse,它可以   只处理String。在另一   手Decimal.Parse允许你   指定NumberStyle。

     

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

     

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

     

Morten Wennevik [C#MVP]

由于Decimal.Parse是由Convert.ToDecimal在内部调用的,如果你有 极端 性能要求,你可能想要坚持使用Decimal.Parse,它会保存一个堆栈帧。

答案 2 :(得分:15)

您可能没有想到的一个因素是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!

这种模式对于错误检查用户输入非常令人敬畏。

答案 3 :(得分:3)

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

知道在大多数情况下,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