Выяснение того, какие исключения может вызвать метод в C#

Есть ли способ узнать, какие исключения могут быть вызваны любым методом в коде.NET? В идеале я хочу посмотреть, что можно бросить, и выбрать, какие из них я хочу обработать. Думаю, я хочу получить информацию, которую вы получите из предложения throws в Java.

Ситуация такова, что я делаю запрос linq для xml-документа из сети и хочу узнать, что может пойти не так. Я мог бы открыть сборку в отражателе и посмотреть, но я подумал, что может быть проще.

4 ответа

Решение

.NET не имеет принудительных ("проверенных") исключений, таких как Java. Intellisense может показать эту информацию, если разработчик добавил /// <exception.../> блок - но в конечном итоге может произойти больше исключений, чем вы ожидаете (OutOfMemoryException, ThreadAbortException, TypeLoadExceptionи т. д. все может произойти довольно непредсказуемо).

В общем, вы должны иметь представление о том, какие вещи могут пойти не так, и какие из них вы можете сделать что-то полезное. В большинстве случаев правильное поведение - позволить исключению всплыть (просто запустив любой код "наконец" для освобождения ресурсов).

Эрик Липперт имеет хороший блог на эту тему здесь.

Я думаю, что Охотник за исключениями может предоставить эту информацию, однако это стоит денег...

Прочитав еще одну статью об этом в Stackru, я основал этот ответ, чтобы написать инструмент для этого, вы можете получить исходный код из GitHub здесь:

Отражатель исключения

Вы также можете прочитать больше здесь:

http://steves-rv-travels.com/archives/167

Пока вы используете классы BCL, они все полностью документированы, и поэтому Intellisense отображает любое исключение, которое может вызвать метод. Кроме этого (и чтения документов), я думаю, что нет никакого пути.

Другие вопросы по тегам