Convert.ToDecimal(string)
和Decimal.Parse(string)
之间C#的区别是什么?
在什么情况下你会使用一个而不是另一个?
它对绩效有何影响?
在两者之间进行选择时,我应该考虑哪些其他因素?
答案 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.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!
这种模式对于错误检查用户输入非常令人敬畏。
答案 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