Подтвердить что ты не робот

Разница между Convert.ToDecimal(строка) и Decimal.Parse(строка)

В чем разница между С# между Convert.ToDecimal(string) и Decimal.Parse(string)?

В каких сценариях вы бы использовали один над другим?

Какое влияние это оказывает на производительность?

Какие еще факторы следует принимать во внимание при выборе между ними?

4b9b3361

Ответ 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 для одного и того же преобразования. Разочарование и раздражение.