38

Convert.ToDecimal(string)在 C# 中和之间有什么区别Decimal.Parse(string)

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

它对性能有什么影响?

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

4

7 回答 7

56

要记住一个重要的区别:

Convert.ToDecimal0如果给定一个null字符串,将返回。

decimal.ParseArgumentNullException如果您要解析的字符串是null.

于 2008-09-18T05:26:23.510 回答
46

来自bytes.com

Convert 类旨在转换各种类型,因此您可以将更多类型转换为 Decimal,而不是使用只能处理 String 的 Decimal.Parse。另一方面,Decimal.Parse 允许您指定 NumberStyle。

十进制和十进制是别名并且是相等的。

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

Morten Wennevik [C# MVP]

由于 Decimal.Parse 由 Convert.ToDecimal 在内部调用,因此如果您有极端的性能要求,您可能希望坚持使用 Decimal.Parse,它将保存一个堆栈帧。

于 2008-09-18T01:33:18.063 回答
18

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

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!

这种模式对于错误检查用户输入来说非常棒。

于 2008-09-18T01:37:03.720 回答
3

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

于 2008-09-18T01:35:39.213 回答
1

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

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

于 2014-07-25T08:59:56.760 回答
0

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

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

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

于 2017-02-13T21:33:57.967 回答
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
于 2019-03-14T16:55:52.263 回答