Обработка пользовательских исключений (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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д