C#
Как вывести сообщение об ошибке в C#
В C# сообщение об ошибке можно вывести разными способами: в консоль через Console.WriteLine или Console.Error.WriteLine, в окне Windows Forms через MessageBox.Show, на самой форме через Label, либо вернуть текст ошибки из метода. Выбор зависит от типа приложения. Для консольной программы нужен вывод в терминал, для Windows Forms — понятное сообщение в интерфейсе
Ошибка в консольной программе
Самый простой вариант:
Console.WriteLine("Ошибка: введите число больше нуля");
Если хотите явно написать в поток ошибок, используйте Console.Error:
Console.Error.WriteLine("Ошибка: файл не найден");
Это полезно для утилит и скриптов, где обычный вывод и ошибки могут обрабатываться отдельно
Пример с проверкой ввода
Часто ошибка появляется не из-за исключения, а из-за неправильного ввода пользователя
Console.Write("Введите возраст: ");
string? input = Console.ReadLine();
if (!int.TryParse(input, out int age))
{
Console.Error.WriteLine("Ошибка: возраст должен быть числом");
return;
}
if (age < 0)
{
Console.Error.WriteLine("Ошибка: возраст не может быть отрицательным");
return;
}
Console.WriteLine($"Возраст: {age}");
Здесь TryParse лучше, чем int.Parse, потому что программа не падает, а сама решает, что показать пользователю
MessageBox в Windows Forms
В Windows Forms можно показать окно:
MessageBox.Show(
"Введите корректную сумму заказа",
"Ошибка ввода",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
Такой вариант подходит для редких важных ошибок. Но если ошибка появляется при каждом вводе, лучше показать текст рядом с полем, чтобы не раздражать пользователя всплывающими окнами
Сообщение на форме через Label
Например, на форме есть TextBox, Button и Label с именем errorLabel
private void calculateButton_Click(object sender, EventArgs e)
{
if (!decimal.TryParse(totalTextBox.Text, out decimal total))
{
errorLabel.Text = "Введите сумму числом";
return;
}
errorLabel.Text = "";
resultLabel.Text = $"Итого: {total}";
}
Так пользователь сразу видит, что исправить. Это обычно лучше, чем показывать технический текст исключения
try catch и текст ошибки
try catch нужен, когда операция действительно может выбросить исключение: чтение файла, сеть, база данных, преобразование старого кода
try
{
string text = File.ReadAllText("settings.json");
Console.WriteLine(text);
}
catch (FileNotFoundException)
{
Console.Error.WriteLine("Ошибка: файл settings.json не найден");
}
Не показывайте обычному пользователю сырой ex.ToString(). В нем бывает стек вызовов, пути к файлам и технические детали. Для разработчика это полезно, для пользователя — шум
Хорошая практика — разделять два сообщения. Пользователю показывайте короткий текст: «Не удалось прочитать файл настроек». Разработчику в лог можно записать техническую причину: имя исключения, путь к файлу, стек вызовов. В учебной консольной программе логом может быть просто отдельная строка в Console.Error, а в реальном приложении — файл, журнал событий или система мониторинга
Частые ошибки
Первая ошибка — ловить все через пустой catch и ничего не выводить. Тогда программа молчит, а пользователь не понимает, что произошло. Вторая — показывать слишком техническое сообщение. Третья — использовать исключения там, где достаточно обычной проверки if. Четвертая — выводить ошибку, но продолжать выполнение так, будто все в порядке
Мини-задача: сделайте консольную программу, которая просит сумму заказа. Если ввод не число, выведите ошибку. Если число меньше нуля, выведите другую ошибку. Если все правильно, напечатайте итог
Что почитать дальше по C#
- Ошибки C#: cannot convert, null reference и missing using
- Console.ReadLine в C#
- C# с нуля: первый проект через dotnet new
- Рубрика C#
Что почитать дальше по C#
Если нужен общий маршрут по теме, откройте рубрику C#. Для соседних задач пригодятся эти разборы:
- C# с нуля: первый проект через dotnet new
- try catch в C#: как поймать ошибку и не уронить программу
- Как вывести другое слово в ComboBox на C#
- Как установить .NET SDK для C#