int.Parse Fails On Valid String - PullRequest
       6

int.Parse Fails On Valid String

1 голос
/ 11 января 2020

Я полностью потерян с этим.

Итак, я пытаюсь использовать int.TryParse для анализа строки, совершенно правильная строка, содержащая буквально число «3», вот и все. Но он возвращает мне ложь, когда я пытаюсь разобрать его.

Вот как я его использую - я отладил его, и int.TryParse определенно возвращает ложь, как код в если оператор выполняется:

if (!int.TryParse(numberSplitParts[0], out int hour))
        return false;

И я посмотрел в отладчике numberSplitParts[0] определенно di git 3, это совершенно правильно! Valid String In Debugger

Итак, я провел некоторое исследование, и люди говорили, что нужно использовать инвариант CultureInfo, поэтому я сделал это, вот новая обновленная строка (я также попытался NumberStyles.Any и это тоже не сработало):

 if (!int.TryParse(numberSplitParts[0], NumberStyles.Integer, CultureInfo.InvariantCulture, out int hour))
        return false;

Это тоже не сработало - оно продолжает возвращать мне false, а hour равно 0.

Я также пробовал все другие типы чисел - byte.Parse, Int16.Parse et c. Все они тоже вернули false.

И я попробовал обычный int.Parse, и это просто дает мне следующее исключение:

Система. FormatException : 'Входная строка была не в правильном формате.'

Но затем я попробовал это в другом проекте, поэтому я скопировал строковый массив и все, и он работал там - как с «InvariantCulture», так и без него.

Итак, я подозреваю, что проект, в котором я работаю, должен быть настроен таким образом, чтобы вызвать int.Parse / int.TryParse не работать. Это находится в библиотеке классов, доступ к которой осуществляется из приложения UWP - может ли тот факт, что это выполняется под UWP, иметь какой-либо эффект?

1 Ответ

1 голос
/ 11 января 2020

Как обсуждалось в комментариях, это связано с парой ЛЕВОГО-ПРАВОГО МАРКА символов Unicode во входных данных.

Когда вы делали свой тест в другом проекте, Вы, вероятно, жестко запрограммировали строку "3" или получили данные от источника, в котором не были добавлены те же невидимые символы.

Лучшим тестом является проверка того, находится ли numberSplitParts[0] == "3" в окне просмотра. или в самом вашем коде. Другой способ - установить numberSplitParts[0] = "3" в вашем проекте UWP и посмотреть, правильно ли он анализируется.

По моему опыту, в большинстве случаев «эта строка выглядит нормально, но терпит неудачу» из-за незаметного проникновения символов Unicode на ваш вход.

...