Преобразуйте строку в целое число [дубликат]

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

Сорящий код с блоками попытки/выгоды не является решением.

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

Взгляды у Вас есть любой шанс систематической проверки, что надлежащие обработчики исключений доступны для обращения к чему-либо, что могло пойти не так, как надо или в прозрачных или в непрозрачных объектах, не реалистично. (Думайте также с точки зрения последней привязки / внешних библиотек и ненужных зависимостей между несвязанными функциями в стеке вызовов, поскольку система развивается)

, Использование кодов возврата просто, может легко систематически проверяться для покрытия, и, если обработано правильно вынуждает разработчиков генерировать полезные сообщения об ошибках, а не слишком общие дампы стека и затенить исключения ввода-вывода, которые "исключительно" бессмысленны даже к большей части clueful конечных пользователей.

-

Мое заключительное возражение является использованием собравших "мусор" языков. Не понимайте меня превратно.. Я люблю их при некоторых обстоятельствах, но в целом для систем сервера/MC у них нет места, по моему мнению.

GC весьма ненадежен - даже чрезвычайно, хорошо разработал алгоритмы GC, может держаться за объекты слишком долго или даже навсегда на основе неочевидных круговых ссылок в их графиках зависимости.

системы неGC после нескольких простых шаблонов и использования памяти бухгалтерские инструменты не имеют этой проблемы, но действительно требуют большего количества работы в дизайне и тестируют заранее, чем среды GC. Компромисс здесь - то, что утечки памяти чрезвычайно легко определить во время тестирования в неGC при нахождении, что связанные с GC проблемные условия являются намного более трудным суждением.

Память является дешевой, но что происходит, когда Вы просачиваетесь, дорогие объекты, такие как транзакция обрабатывает, объекты синхронизации, сокетные соединения... и т.д. В моей среде, самая мысль, что можно просто расслабиться и позволить языку волноваться об этом для Вас, невероятна без значительных изменений fundental в описании программного обеспечения.

9
задан Community 23 May 2017 в 12:07
поделиться

5 ответов

Вместо использования Convert.ToInt32 (string) вам следует рассмотреть возможность использования Int32.TryParse (string, out int) . Методы TryParse помогают более безопасно обрабатывать вводимые пользователем данные. Наиболее вероятная причина вашей ошибки заключается в том, что возвращаемая вами подстрока имеет недопустимое строковое представление целочисленного значения.

string str = line.Substring(0,1);
int i = -1;
if (Int32.TryParse(str, out i))
{
   Console.WriteLine(i);
}
19
ответ дан 4 December 2019 в 10:33
поделиться

Значение FormatException

не состоит из необязательного знак, за которым следует последовательность цифр (От 0 до 9).

Исключение, которое выдается, когда формат аргумента не соответствует спецификации параметров вызванный метод.

Вы можете использовать Int32.TryParse , если вы не хотите генерировать подобное исключение.

Int32.TryParse : преобразует строковое представление число в 32-битное целое число со знаком эквивалент. Возвращаемое значение указывает успешна ли операция.

1
ответ дан 4 December 2019 в 10:33
поделиться

Вполне возможно, что там есть пробелы. Попробуйте запустить что-нибудь похожее на trim () (я не уверен, на каком вы языке), которое удалит пустое пространство. Кроме того, попробуйте распечатать строку, чтобы убедиться, что у вас действительно правильная ее часть. Мы все это сделали :)

0
ответ дан 4 December 2019 в 10:33
поделиться

Вполне вероятно, что введенный вами формат не допустимый формат. Попробуйте вместо этого. Если число недействительно, должно появиться сообщение об ошибке.

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

string line = "23"; // or whatever.
string str = line.Substring(0,1);
int i = 0;
if (Int32.TryParse(str, out i)) {
   Console.WriteLine(i);
} else {
    Console.WriteLine ("Error converting '" + line + "', '" + str + "'.");
}

Вы можете увидеть, что пользователь вводит " -1 " например. Если вы введете подстроку (0,1) на этом, вы получите только "-" , что на самом деле неверно.

0
ответ дан 4 December 2019 в 10:33
поделиться

Вы уверены, что значение, возвращаемое в str, является целым, установите точку отладки, если вы используете Visual Studio. У меня есть ощущение, что ваша проблема может быть в том, что вы на самом деле не возвращаете целое число. Попробуйте:

line.Trim().Substring(0,1);

Это удалит все пробелы.

0
ответ дан 4 December 2019 в 10:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: