Ответ
Разница кардинальна: Parse использует исключения для обработки ошибок, а TryParse — возвращаемое значение, что делает его предпочтительным для обработки ненадежных данных.
Метод Parse (например, int.Parse, DateTime.Parse)
- Механизм ошибки: Выбрасывает исключение, если строка имеет неверный формат.
- Тип исключения:
FormatException. Для числовых типов при переполнении —OverflowException. - Производительность: Низкая при ошибках. Создание и выбрасывание исключения — очень дорогая операция (тысячи тактов процессора).
- Когда использовать: Когда вы абсолютно уверены в корректности и формате входных данных (например, разбор конфигурационного файла вашего приложения, констант).
Метод TryParse (например, int.TryParse, DateTime.TryParse)
- Механизм ошибки: Возвращает
bool(true— успех,false— неудача). Результат преобразования передается через параметрout. - Исключения: Не выбрасывает исключений при неудаче.
- Производительность: Высокая. Даже в случае ошибки выполняется быстро, так как нет накладных расходов на исключения.
- Когда использовать: Для обработки пользовательского ввода, данных из внешних источников (файлы, сеть, база данных), где возможны ошибки формата.
Наглядный пример:
string userInput = "123abc";
// ОПАСНО: Использование Parse для пользовательского ввода
try
{
int parsedValue = int.Parse(userInput); // Выбросит FormatException
Console.WriteLine($"Parsed: {parsedValue}");
}
catch (FormatException)
{
Console.WriteLine("Parse failed with exception!"); // Дорогостоящая обработка
}
// ПРАВИЛЬНО: Использование TryParse для пользовательского ввода
if (int.TryParse(userInput, out int tryParsedValue))
{
Console.WriteLine($"Parsed successfully: {tryParsedValue}");
}
else
{
Console.WriteLine("Failed to parse. Using default value (0).");
// tryParsedValue здесь равен default(int), т.е. 0.
// Можно безопасно продолжить работу.
}
Best Practice: Всегда отдавайте предпочтение TryParse при работе с любыми внешними или непроверенными данными. Используйте Parse только в контролируемых внутренних сценариях, где ошибка формата свидетельствует о серьезной логической ошибке в коде.