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

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

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

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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

EDIT: если вы посмотрите на пространство имен doco (для System.IO), он перечисляет возможные брошенные исключения.