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.ToDecimal
和Parse
无法将字符串转换为正确的十进制格式,则抛出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。 令人沮丧和烦人。