Как мне узнать, какие исключения могут быть вызваны функцией .NET?

#.net #exception #reference

Вопрос:

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

В качестве примера я недавно опробовал Linq в Visual C# 2008 и загружал XML-файл в XDocument. Только в ходе тестирования я понял, что если вы попытаетесь загрузить несуществующий файл, он вызовет исключение FileNotFound, но если вы попытаетесь загрузить каталог вместо файла, вы получите исключение UnauthorizedAccessException. Также просматриваю систему.Пространство имен ввода-вывода Я вижу такие вещи, как исключение загрузки файлов и исключение PathTooLongException, и я могу догадаться, когда они могут быть выброшены, но могут быть и другие, которые могут быть выброшены в некоторых обстоятельствах, о которых я еще не думал.

Единственное решение, которое у меня есть прямо сейчас, — это просто поймать те, о которых я знаю, а затем определить тип исключения, но я бы предпочел точно знать, с какими типами исключений я, скорее всего, столкнусь и почему. Я бы подумал, что в библиотеке MSDN будет такая информация, но я нигде не могу ее найти. Неужели я просто слепой? Есть ли эта информация где-нибудь еще?

ПРАВКА: Еще немного конкретики, прямо сейчас я ищу исключения, которые могут быть вызваны XDocument.Функция загрузки(строка). Похоже, что в онлайн-документации или браузере объектов нет ничего относящегося к делу. Должен ли я теперь просто выполнить несколько тестов и посмотреть, во что я ввязываюсь?

Ответ №1:

Хороший вопрос, у вас видение 20/20. C#/.NET не реализует оператор throws (т. Е. проверенные исключения).

Любой, кто говорит на таком языке, как Java, вероятно, задастся этим вопросом.

Андерс Хейлсберг, отец C#, объясняет причину исключения проверенных исключений из C# в этой статье/интервью. Это хорошее чтение.

Из этой статьи Андерс говорит::

Меня беспокоят проверенные исключения, это наручники, которые они надевают на программистов. Вы видите, как программисты подбирают новые API, в которых есть все эти предложения throws, а затем вы видите, насколько запутанным становится их код, и вы понимаете, что проверенные исключения им нисколько не помогают. Это своего рода диктаторские разработчики API, которые рассказывают вам, как обрабатывать исключения. Они не должны этого делать.

Итак, как сказали Митч и моноксид, в документации MSDN для FCL .NET перечислены исключения, относящиеся к каждому классу, а также исключения, возможные в каждом пространстве имен.

Комментарии:

1. Я собирался включить ссылку на эту статью, но не смог ее найти — это хорошее чтение. 1

2. Занимаясь Java в колледже и C# на работе, я думаю, что это единственное, чего мне больше всего не хватает в Java, хотя, конечно, в то время, когда я еще учился в колледже и до работы над кодом производственного уровня это было неприятно, я нахожу действительно полезным знать, каких исключений ожидать.

Ответ №2:

Если функция создает исключение, оно обычно отображается в нижней части страницы автономной справки или в браузере объектов. Он также указан прямо под информацией о том, как вызывать функции в онлайн-библиотеке MSDN, например, строка.Содержит(), он помечен как «Исключения».

Кроме того, только функции, свойства и т. Д. На самом деле создают исключения, поэтому эти вещи не рассматриваются в общей документации, только в документации для функций или средств доступа, которые на самом деле их создают, как в приведенном примере. Ваш лучший выбор-это порыться в браузере объектов в VS с классами, которые вас интересуют.

Ответ №3:

.NET не реализует ничего подобного ключевому слову «throws» в java, поэтому лучше всего проверить онлайн-документацию MSDN.

ИЗМЕНИТЬ: если вы посмотрите на документ пространства имен (для System.IO, например) в нем перечислены возможные исключения.

Комментарии:

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