Чтение исключения из try catch, когда тип исключения не указан - PullRequest
2 голосов
/ 18 апреля 2011

В случаях, когда вы используете блок try catch как таковой.

try {
    //Do my work!
} 
catch 
{
    //Handle my exception
}

Есть ли какой-либо способ ссылки на объект исключения в блоке catch?

т.е.:

try {
    //Do my work!
} 
catch 
{
    //Handle my exception
    MyUndefinedExceptionObject.Message ????
}

РЕДАКТИРОВАТЬ: Я не думаю, что я был достаточно ясен.Я знаю, как обычно можно ловить исключения, используя блок try catch.Что мне интересно, так это то, что у вас есть возможность не указывать тип для вашего исключения, но объявлять блок, есть ли еще способ извлечения объекта исключения в таких случаях?Судя по вашим ответам, я полагаю, что нет?

Ответы [ 4 ]

6 голосов
/ 18 апреля 2011

Вы захотите поймать тип исключения, который вам небезразличен. Когда вы это сделаете, у вас будет доступ ко всем свойствам этого исключения.

try
{
    //Do my work!
} 
catch (MyExceptionType e)
{
   string s = e.Message;
}

Вот справочник в MSDN , чтобы набрать скорость.

Относительно вашего редактирования: нет, нет никакого способа получить доступ к выброшенному исключению, если исключение не указано явно в вашем операторе catch.

2 голосов
/ 18 апреля 2011

номер

Использование голого catch означает, что в противном случае вас не волнует фактическое исключение, почему бы не использовать

catch (System.Exception ex)

поймать какое-нибудь исключение? Конечно, вы должны ловить только те исключения, которые вы обработаете.

2 голосов
/ 18 апреля 2011

Да, вот так:

try 
{
    //Do my work!
} 
catch (mySpecificException myEx)
{
    //Handle my exception
}
catch (Exception ex)
{
    //Handle my exception
}

(наиболее конкретно к наименее конкретному)

1 голос
/ 18 апреля 2011

Вам необходимо указать конкретный тип исключения, которое вы перехватываете, и назначить его переменной.

Сделайте это, используя вместо этого следующий синтаксис:

try 
{
    // Do work
}
catch (MyUndefinedExceptionObject ex)
{
    Debug.WriteLine(ex.Message);
}

Вы также можете включить несколько блоков перехвата с соответствующим измененным типом исключения.Однако помните, что вы всегда должны упорядочивать их из большинства производных до наименьшего производного, заканчивая базовым классом для всех исключений, System.Exception.

Вы также должныобычно воздерживаются от перехвата System.Exception, вместо этого предпочитая only , чтобы перехватывать производные исключения, которые вы можете обработать в блоке catch, и это не повредит состоянию вашей программы.Поймать System.Exception класс - плохая идея, потому что вы также поймаете исключения, которые вы не сможете обработать, например OutOfMemoryException или StackOverflowException.

У Microsoft есть полезная статья о лучших практиках здесь: Лучшие практики для обработки исключений

...