Обработка пользовательских исключений (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);
}