Как использовать Convert.ChangeType (), когда ConversionType является десятичным и ввод "40,00" - PullRequest
25 голосов
/ 11 октября 2011

Я имею в виду, я хочу преобразовать это:

string a = "40.00";
Convert.ChangeType(a, typeof(decimal))

результат - десятичное значение "4000"

проблема в том, что вызов convert находится в очень абстрактном обобщенном методе в xmlToObject Converter. Я не хочу добавлять программно много разных исключений для правильного преобразования.

С уважением, Крис

Ответы [ 3 ]

42 голосов
/ 11 октября 2011

Десятичная точка не может быть представлена ​​символом точки в вашей текущей культуре.

Обычно при выполнении преобразований, инвариантных к культуре, лучше указать CultureInfo.InvariantCulture в качестве аргумента IFormatProvider для метода :

(decimal) Convert.ChangeType(a, typeof(decimal), CultureInfo.InvariantCulture);
3 голосов
/ 11 октября 2011

Преобразование, скорее всего, выполняется с использованием культуры, в которой точка используется в качестве разделителя тысяч вместо десятичного разделителя.

Укажите культуру при преобразовании значения:

Convert.ToDecimal(a, CultureInfo.InvariantCulture)
2 голосов
/ 11 октября 2011

следующий код

 string s = "40.00";
 decimal d = (decimal)Convert.ChangeType(s, typeof(decimal));

делает d = 40. Это выглядит хорошо для меня. В чем ваша проблема?

Edit: Кажется, у вас могут быть проблемы с используемой культурой. Сделайте это для конвертации:

string s = "40.00";
decimal d = (decimal)Convert.ChangeType(s, typeof(decimal), CultureInfo.InvariantCulture);
...