Sobes.tech
Назад к вопросам
Junior — Middle
62

Чем отличаются поведения методов TryParse и Parse при неудачном преобразовании строки в число?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Parse при неудачном преобразовании выбрасывает исключение, а TryParse не падает и вместо этого возвращает false. TryParse удобнее, когда ошибка преобразования — нормальная ситуация и ее нужно обработать без try/catch. Parse используют, когда невалидный ввод считается исключением из обычного сценария.

Определение:

Parse пытается преобразовать строку в число и, если строка некорректна, выбрасывает исключение, например FormatException или OverflowException.

TryParse делает то же преобразование, но возвращает bool: true, если преобразование удалось, и false, если нет. При этом исключение при обычной ошибке формата не выбрасывается, а результат записывается в out-параметр.

Пример использования:

string input = "123";

int a = int.Parse(input); // выбросит исключение, если input не число

if (int.TryParse(input, out int b))
{
    Console.WriteLine($"Успех: {b}");
}
else
{
    Console.WriteLine("Строка не является корректным числом");
}

Пояснение кода:

В первом случае int.Parse(input) сразу пытается преобразовать строку в int. Если input равен, например, "abc", выполнение прервется исключением.

Во втором случае int.TryParse(input, out int b):

  • пытается распознать строку;
  • если получилось, кладет число в b и возвращает true;
  • если не получилось, возвращает false, а b получает значение по умолчанию для типа int0.

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

Ключевые моменты:

  • Parse — для ситуаций, когда некорректный ввод считается исключением.
  • TryParse — для ожидаемых ошибок ввода, когда важно не падать.
  • Parse при ошибке выбрасывает исключение.
  • TryParse возвращает bool и использует out для результата.
  • Для пользовательского ввода и данных из внешних источников обычно предпочтительнее TryParse.