2013-06-06 4 views
-3

Что я упускаю:Decimal.TryParse Не удается разобрать целочисленное значение

decVal = Decimal.Parse(myAr[0]); 

Или

Decimal.TryParse(myAr[0], out decVal); 

терпит неудачу!

Входная строка не была в правильном положении.

myAr[0] is "678016". 

Пробовал добавить NumberStyle.Any и CultureInfo.InvarialtCulture, но получил те же результаты.

Более подробная информация по строке:

это сцепленное с некоторыми буквами в древнееврейском и пространстве «\ u200e» между ними. и затем я использую split (''), чтобы вернуть числа.

Это, вероятно, источником этой ошибки, но когда я проверяю myAr [0] в часах это чистая строка ....

+1

Просьба указать воспроизведение. Это должно сработать. –

+1

Пробелы? Делает ли 'Decimal.TryParse (myAr [0] .Trim(), out decVal);' работает? – Corak

+6

Проверьте фактическое значение 'myAr [0]'. Я не могу воспроизвести. – Oded

ответ

3

Ребята, я нашел ответ, я буду переписывать вопрос для будущего поколения The Original?. строка была конкатенацией букв и цифр, разделенных специальной последовательностью, чтобы сохранить порядок в ситуации rtl: «\ u200E».

Число, которое впоследствии извлекается с использованием string.split (''), который, кажется, работает нормально (в часах). Это вызвало проблему.

однажды я использовал string.split («\ u200e»). ToCharArray() У меня были те же результаты, но теперь десятичная. Работает. Похоже, что специальный символ все еще внутри строки, невидимый для часов.

2

Это странно, на моей машине (.NET 4) даже это работает:

Decimal.TryParse("asdf123&*", out someDecimal); 

работами я имею в виду, что TryParse возвращает ложь, не исключение.

Parse метод может бросить исключение - может быть, у вас есть некоторые пробелы или строка содержит буквально "(кавычки)

+0

И это ответ ... как? – DonBoitnott

+2

На самом деле очень хороший момент! 'TryParse' никогда не должен бросать исключение! – Corak

+0

OP не указал, какой тип Parse выбрал исключение. _Should_ был более конкретным, но не был. – DonBoitnott

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