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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
35
0
58 283
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

От 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, он сохранит кадр стека.

Если, конечно, Convert.ToDecimal и / или Decimal.Parse не будут встроены во время компиляции или даже во время JIT. IOW, ~~ исполнение ~~

sehe 20.08.2013 03:51

Одно из распространенных предложений, относящихся к исходной теме - используйте 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

Другие вопросы по теме