Convert.ToDecimal(string)和Decimal.Parse(string)之间的区别

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

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

它对性能有何影响?

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

来自bytes.com :

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

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

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

Morten Wennevik [C#MVP]

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

要记住一个重要的区别:

如果给出一个null字符串, Convert.ToDecimal将返回0

如果要解析的字符串为null decimal.Parse将抛出ArgumentNullException

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

 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)之间的主要区别是Convert处理Null而另一个抛出exception

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

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

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

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