Разница между Convert.ToDecimal(строка) и Decimal.Parse(строка)
В чем разница между С# между Convert.ToDecimal(string)
и Decimal.Parse(string)
?
В каких сценариях вы бы использовали один над другим?
Какое влияние это оказывает на производительность?
Какие еще факторы следует принимать во внимание при выборе между ними?
Ответы
Ответ 1
От bytes.com:
Класс Convert предназначен для конвертировать широкий диапазон типов, поэтому вы может конвертировать больше типов в десятичный, чем вы можете с Decimal.Parse, который может обрабатывать только String. С другой hand Decimal.Parse позволяет вам укажите NumberStyle.
Десятичные и десятичные числа - это псевдонимы и равны.
Для Convert.ToDecimal(строка), Decimal.Parse вызывается внутри.
Мортен Венневик [С# MVP]
Так как Decimal.Parse вызывается внутри Convert.ToDecimal, если у вас есть требования к производительности экстремальные, вы можете захотеть придерживаться Decimal.Parse, он сохранит фрейм стека.
Ответ 2
Существует одно важное различие:
Convert.ToDecimal
вернет 0
, если ему задана строка null
.
decimal.Parse
будет вызывать ArgumentNullException
, если строка, которую вы хотите проанализировать, null
.
Ответ 3
Один из факторов, о котором вы, возможно, и не подумали, - это метод 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!
Этот шаблон очень невероятно потрясающий для проверки ошибок пользователя.
Ответ 4
Одно общее предложение, связанное с оригинальной темой - используйте TryParse, как только вы не уверены, что параметр входной строки WILL будет правильным представлением формата числа.
Ответ 5
Основное различие между Convert.ToDecimal(string)
и Decimal.Parse(string)
заключается в том, что Convert обрабатывает Null
, тогда как другой генерирует исключение
Примечание. Он не будет обрабатывать пустую строку.
Ответ 6
Convert.ToDecimal, по-видимому, не всегда возвращает 0. В моей инструкции linq
var query = from c in dc.DataContext.vw_WebOrders
select new CisStoreData()
{
Discount = Convert.ToDecimal(c.Discount)
};
Скидка по-прежнему равна нулю после преобразования из десятичного числа? то есть null. Тем не менее, вне выражения Linq, я получаю 0 для одного и того же преобразования. Разочарование и раздражение.