Convert.ToDecimal(string)
在 C# 中和之间有什么区别Decimal.Parse(string)
?
在什么情况下你会使用其中一种?
它对性能有什么影响?
在两者之间进行选择时,我还应该考虑哪些其他因素?
要记住一个重要的区别:
Convert.ToDecimal
0
如果给定一个null
字符串,将返回。
decimal.Parse
ArgumentNullException
如果您要解析的字符串是null
.
来自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,它将保存一个堆栈帧。
您可能没有想到的一个因素是Decimal.TryParse
方法。如果它们无法将字符串转换为正确的十进制格式,则两者都Convert.ToDecimal
抛出异常。Parse
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!
这种模式对于错误检查用户输入来说非常棒。
与原始主题相关的一个常见建议 -TryParse()
如果您不确定输入字符串参数将是正确的数字格式表示,请立即使用。
Convert.ToDecimal(string)
和之间的主要区别Decimal.Parse(string)
是转换处理Null
而另一个抛出异常
注意:它不会处理空字符串。
Convert.ToDecimal 显然并不总是返回 0。在我的 linq 语句中
var query = from c in dc.DataContext.vw_WebOrders
select new CisStoreData()
{
Discount = Convert.ToDecimal(c.Discount)
};
从小数转换后折扣仍然为空?那是空的。但是,在 Linq 语句之外,对于相同的转换,我确实得到了 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