Ну, у вас нет кода после блоков catch
, поэтому программа остановится. Не уверен, что ты пытаешься сделать.
Следующее должно быть доказательством того, что программа не просто «останавливается» после блоков catch
. Он выполнит код после блоков catch
, если есть код для выполнения:
static void Main(string[] args)
{
try
{
new Test().s();
}
catch (ArgumentException x)
{
Console.WriteLine("ArgumentException caught!");
}
catch (Exception ex)
{
Console.WriteLine("Exception caught!");
}
Console.WriteLine("I am some code that's running after the exception!");
}
Код напечатает соответствующую строку в зависимости от того, какое исключение было перехвачено. Затем он напечатает I am some code that's running after the exception!
в конце.
UPDATE
В своем редактировании вы спросили, почему Console.WriteLine(@class);
не похоже на попадание. Причина в том, что вы явно бросаете исключение в самой первой строке вашего s()
метода; все, что следует, игнорируется. Когда встречается исключение, выполнение останавливается, и исключение распространяется по стеку вызовов до тех пор, пока соответствующий обработчик не сможет его обработать (это может быть блок catch
, который соответствует try
, который упаковывает рассматриваемый оператор в тот же метод или это может быть блок catch
дальше по стеку вызовов. Если соответствующий обработчик не найден, программа завершит работу с помощью трассировки стека [по крайней мере, в Java - не уверен, что то же самое происходит в C #]).
Если вы хотите попасть в строку Console.WriteLine
, вам не следует явно выдавать исключение в начале метода.