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#

Если нужен общий маршрут по теме, откройте рубрику C#. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x