2008-09-18 2 views
23

В чем разница между C12 между Convert.ToDecimal(string) и Decimal.Parse(string)?Разница между Convert.ToDecimal (строка) & Decimal.Parse (строка)

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

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

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

ответ

36

От bytes.com:

Преобразовать класс предназначен для преобразования широкий диапазон типов, так что вы можете преобразовать больше типов в десятичные, чем вы можете с Decimal.Parse, который может иметь дело только с String. С другой стороны Рука Decimal.Parse позволяет вам указать NumberStyle.

Десятичные и десятичные числа - это псевдонимы и равны.

For Convert.ToDecimal (string), Decimal.Parse вызывается внутри.

Morten Wennevik [C# MVP]

Поскольку Decimal.Parse называется внутренне Convert.ToDecimal, если у вас есть экстремальных требования к производительности вы могли бы хотеть придерживаться Decimal.Parse, он будет сохранить фрейм стека.

+1

Если, конечно, Convert.ToDecimal и/или Decimal.Parse обрабатывается во время компиляции или даже во время JIT. IOW, ~~ purformance ~~ – sehe 2013-08-19 23:51:14

3

Одно общее предложение, связанное с оригинальной темой - пожалуйста, используйте TryParse(), как только вы не уверены, что параметр входной строки WILL будет правильным представлением формата чисел.

15

Один из факторов, о котором вы, возможно, и не подумали, - это метод 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! 

Этот шаблон очень невероятно потрясающий для ввода данных с ошибкой.

41

Существует одно важное различие, чтобы иметь в виду:

Convert.ToDecimal вернется 0, если он получает null строку.

decimal.Parse будет вызывать ArgumentNullException, если строка, которую вы хотите проанализировать, - null.

0

Основное различие между Convert.ToDecimal(string) и Decimal.Parse(string) что Преобразовать обрабатывает Null, тогда как другой бросает исключение

Примечание: Это не будет обрабатывать пустую строку.

0

Convert.ToDecimal, по-видимому, не всегда возвращает 0.В моем заявлении linq

var query = from c in dc.DataContext.vw_WebOrders 
select new CisStoreData() 
{ 
     Discount = Convert.ToDecimal(c.Discount) 
}; 

Скидка по-прежнему равна нулю после преобразования из десятичного числа? то есть null. Тем не менее, вне выражения Linq, я получаю 0 для одного и того же преобразования. Разочарование и раздражение.

Смежные вопросы