Обработка пользовательских исключений (Console Application) - C#
Формулировка задачи:
День добрый!
Прошерстила гугл, насколько смогла, но ответа на свой вопрос так и не нашла.
Есть у меня проект, в котором я впервые использовала пользовательские исключения. Т.к. тело Main() содержит бесконечный цикл (программа работает по типу командной строки), то в случае неверно введенных данных мне нужно не завершать всю программу целиком, а завершить только эту итерацию. Потому в случае передачи невалидных значений экземпляру некоторого класса выбрасывается пользовательское исключение, ктр я ловлю в теле Main() и таким образом завершаю итерацию цикла while(true).
Так вот, есть у меня 2 класса с идентичными конструкторами (для простоты чтения сигнатуры упрощены):
В теле Main() имеем:
Так вот: EmptyFilenameException отлавливается, в консоль выводится сообщение "Filename cannot be empty.". При возникновении EmptySettingsException среда тыкает меня носом в строку
и утверждает, что исключение данного типа не обрабатывается в коде пользователя. Тела исключений стандартные (взято из MSDN), ничего кроме строки сообщения в исключение не передается. В чем корень проблемы?
P.S. В программе 7 типов пользовательских исключений, соответственно, в Main() 7 блоков catch(). Обрабатываются все, кроме указанного выше, причем вызываются исключения и в конструкторах, и в public и private методах классов.
P.P.S. Если по неопытности опустила какую-то значимую конкретику - напишите, я добавлю информацию.
Заранее всем спасибо!
Листинг программы
- 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();
- }
- //...
- }
Листинг программы
- 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");
- }
- }
- }
Листинг программы
- throw new EmptySettingsException();
Решение задачи: «Обработка пользовательских исключений (Console Application)»
textual
Листинг программы
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д