Как преобразовать строку (string) в целое число (int) в C#?
Основные способы преобразования строки в целое число
Проблема, с которой вы столкнулись, очень распространена среди новичков. В C# строка и число — это разные типы, и для арифметических операций нужно явно преобразовать строку в число. Есть три основных способа: int.Parse(), Convert.ToInt32() и int.TryParse(). Рассмотрим каждый.
1. int.Parse() — простой, но опасный метод
Этот метод принимает строку и возвращает целое число. Если строка содержит корректное число, всё работает отлично. Но если строка не является числом (например, "abc" или пустая строка), метод выбросит исключение FormatException, которое остановит программу, если его не обработать.
string input = "123";
int number = int.Parse(input); // Работает, number = 123
string badInput = "abc";
int badNumber = int.Parse(badInput); // Ошибка! FormatException
Используйте int.Parse() только когда вы абсолютно уверены, что строка — это валидное целое число (например, данные из другого вашего метода, который гарантирует формат).
2. Convert.ToInt32() — более гибкий, но тоже небезопасный
Этот метод похож на int.Parse(), но он более терпим к null. Если передать null, он вернет 0 вместо исключения. Однако с некорректными строками (например, "abc") он также выбросит FormatException.
string input = "456";
int number = Convert.ToInt32(input); // number = 456
string nullInput = null;
int nullNumber = Convert.ToInt32(nullInput); // nullNumber = 0
string badInput = "xyz";
int badNumber = Convert.ToInt32(badInput); // Ошибка! FormatException
Convert.ToInt32() удобен, когда вы работаете с данными, которые могут быть null, но всё ещё не защищает от случайного ввода текста пользователем.
3. int.TryParse() — самый безопасный и рекомендуемый способ
Это лучший метод для работы с пользовательским вводом. Он не выбрасывает исключения, а возвращает bool — успешно ли прошло преобразование. Если успешно, то результат записывается в выходной параметр (out). Если нет — вы просто получаете false и можете обработать ситуацию без краха программы.
string userInput = Console.ReadLine(); // пользователь вводит "25" или "abc"
if (int.TryParse(userInput, out int result))
{
Console.WriteLine($"Преобразование успешно! Число: {result}");
int sum = result + 10; // Теперь можно складывать
Console.WriteLine($"Результат сложения: {sum}");
}
else
{
Console.WriteLine("Ошибка! Введенная строка не является целым числом.");
}
В этом примере программа не упадет, даже если пользователь введет "abc". Вы просто увидите сообщение об ошибке и сможете попросить ввести число снова.
Сравнение методов
- int.Parse() — для гарантированно корректных строк. Быстрый, но бросает исключение при ошибке.
- Convert.ToInt32() — похож на Parse, но обрабатывает null, возвращая 0. Тоже бросает исключение при некорректной строке.
- int.TryParse() — безопасный, без исключений. Идеален для пользовательского ввода и любых сценариев, где строка может быть невалидной.
Что выбрать для вашей задачи?
Для ввода от пользователя всегда используйте int.TryParse(). Это защитит вашу программу от неожиданных ошибок и сделает её более устойчивой. Вот как будет выглядеть ваш исправленный код:
string userInput = Console.ReadLine();
if (int.TryParse(userInput, out int number))
{
int result = number + 10;
Console.WriteLine($"Результат: {result}");
}
else
{
Console.WriteLine("Пожалуйста, введите целое число.");
}
Также помните, что эти методы работают только с целыми числами (int). Для чисел с плавающей точкой (double, float) существуют аналоги: double.TryParse(), float.TryParse() и т.д.
Альтернативный подход: обработка исключений с try-catch
Хотя int.TryParse() — самый рекомендуемый способ, иногда вы можете встретить код, где используется int.Parse() или Convert.ToInt32() в связке с блоком try-catch. Это тоже допустимый подход, но он менее эффективен, так как обработка исключений — более "тяжелая" операция, чем проверка с помощью TryParse.
string userInput = Console.ReadLine();
try
{
int number = int.Parse(userInput);
int result = number + 10;
Console.WriteLine($"Результат: {result}");
}
catch (FormatException)
{
Console.WriteLine("Ошибка! Введенная строка не является числом.");
}
catch (OverflowException)
{
Console.WriteLine("Ошибка! Число слишком большое или слишком маленькое для int.");
}
Обратите внимание: int.Parse() может выбросить не только FormatException, но и OverflowException, если число выходит за пределы диапазона int (от -2,147,483,648 до 2,147,483,647). int.TryParse() обрабатывает эту ситуацию автоматически, возвращая false.
Итог: Если вы новичок или пишете код для пользовательского ввода, используйте int.TryParse(). Это проще, безопаснее и быстрее. Блоки try-catch оставьте для случаев, когда вы ожидаете исключения от других операций (например, работа с файлами или сетью).
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги
Как сохранять данные в файлы Excel и CSV?
Как пройти собеседование по C#: топ вопросов и ответов