Выяснение, какие исключения может использовать метод С#
Есть ли способ узнать, какие исключения могут быть вызваны любым методом в .NET-коде? В идеале я хочу посмотреть, что можно бросить, и выбрать, с какими из них я хочу справиться. Наверное, мне нужна информация, которую вы получите из предложения throws в java.
Ситуация заключается в том, что я делаю запрос linq в XML-документе из сети и хочу знать, что может пойти не так. Я мог открыть сборку в отражателе и посмотреть, но я подумал, что может быть проще.
Ответы
Ответ 1
.NET не имеет принудительных ( "проверенных" ) исключений, таких как java. Intellisense может показать эту информацию, если разработчик добавил блок /// <exception.../>
, но в конечном итоге может произойти больше исключений, чем вы ожидаете (OutOfMemoryException
, ThreadAbortException
, TypeLoadException
и т.д. Все это может произойти непредсказуемо).
В общем, у вас должно быть представление о том, что может произойти неправильно, и какие из них вы действительно можете сделать что-то полезное. В большинстве случаев правильное поведение заключается в том, чтобы позволить исключению создавать пузырьки (просто запускать любой "окончательный" код для освобождения ресурсов).
У Эрика Липперта есть хороший блог на эту тему здесь.
Ответ 2
Я думаю, что Exception hunter может предоставить эту информацию, однако она стоит денег...
Ответ 3
После прочтения другой статьи об этом в StackOverflow, я построил поверх этого другого ответа, чтобы написать инструмент для этого, вы можете получить исходный код из GitHub здесь:
Исключительный рефлектор
вы также можете прочитать здесь:
http://steves-rv-travels.com/archives/167
Ответ 4
Пока вы используете классы BCL, все они полностью задокументированы, поэтому Intellisense отображает любое исключение, которое может вызвать метод. Помимо этого (и чтения документов), я думаю, что нет.