




От bytes.com:
The Convert class is designed to convert a wide range of Types, so you can convert more types to Decimal than you can with Decimal.Parse, which can only deal with String. On the other hand Decimal.Parse allows you to specify a NumberStyle.
Decimal and decimal are aliases and are equal.
For Convert.ToDecimal(string), Decimal.Parse is called internally.
Morten Wennevik [C# MVP]
Поскольку Decimal.Parse вызывается изнутри Convert.ToDecimal, если у вас есть требования к производительности крайний, вы, возможно, захотите придерживаться Decimal.Parse, он сохранит кадр стека.
Одно из распространенных предложений, относящихся к исходной теме - используйте TryParse(), как только вы не уверены, что параметр входной строки БУДЕТ правильным представлением числового формата.
Один фактор, о котором вы, возможно, не подумали, - это метод 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!
Этот паттерн невероятно хорош для проверки ошибок, вводимых пользователем.
Следует помнить об одном важном отличии:
Convert.ToDecimal вернет 0, если ему дана строка null.
decimal.Parse выдаст ArgumentNullException, если строка, которую вы хотите проанализировать, - это null.
Основное различие между Convert.ToDecimal(string) и Decimal.Parse(string)
заключается в том, что Convert обрабатывает 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
Если, конечно, Convert.ToDecimal и / или Decimal.Parse не будут встроены во время компиляции или даже во время JIT. IOW, ~~ исполнение ~~