Обработка пользовательских исключений (Console Application) - C#

Узнай цену своей работы

Формулировка задачи:

День добрый! Прошерстила гугл, насколько смогла, но ответа на свой вопрос так и не нашла. Есть у меня проект, в котором я впервые использовала пользовательские исключения. Т.к. тело Main() содержит бесконечный цикл (программа работает по типу командной строки), то в случае неверно введенных данных мне нужно не завершать всю программу целиком, а завершить только эту итерацию. Потому в случае передачи невалидных значений экземпляру некоторого класса выбрасывается пользовательское исключение, ктр я ловлю в теле Main() и таким образом завершаю итерацию цикла while(true). Так вот, есть у меня 2 класса с идентичными конструкторами (для простоты чтения сигнатуры упрощены):
public class Data1
    {
        //...
        public Data1(string str1, string str2)
        {
            if (str1 != string.Empty)
            {
                //
            }
            else
            {
                throw new EmptySettingsException();
            }
 
            if (str2 != string.Empty)
            {
                //
            }
            else
            {
                throw new EmptySettingsException();
            }
        }
        //...
    }
public class Data2
    {
        //...
        public Data2(string filename)
        {
            if (filename != string.Empty)
            {
                //
            }
            else
            {
                throw new EmptyFilenameException();
            }
        //...
    }
В теле Main() имеем:
private static void Main(string[] args)
        {
            while (true)
            {
                //..
                try
                {
                    Data1 data1 = new Data1(str1, str2);
                    Data2 data2 = new Data2(filename);
                    //..
                }
                catch (EmptyFilenameException)
                {
                    Console.WriteLine("Filename cannot be empty.\n");
                }
                catch (EmptySettingsException)
                {
                    Console.WriteLine("Settings cannot be empty.\n");
                }
            }
        }
Так вот: EmptyFilenameException отлавливается, в консоль выводится сообщение "Filename cannot be empty.". При возникновении EmptySettingsException среда тыкает меня носом в строку
throw new EmptySettingsException();
и утверждает, что исключение данного типа не обрабатывается в коде пользователя. Тела исключений стандартные (взято из MSDN), ничего кроме строки сообщения в исключение не передается. В чем корень проблемы? P.S. В программе 7 типов пользовательских исключений, соответственно, в Main() 7 блоков catch(). Обрабатываются все, кроме указанного выше, причем вызываются исключения и в конструкторах, и в public и private методах классов. P.P.S. Если по неопытности опустила какую-то значимую конкретику - напишите, я добавлю информацию. Заранее всем спасибо!

Решение задачи: «Обработка пользовательских исключений (Console Application)»

textual
Листинг программы
catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы