#.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. Однако это еще не все возможности, поскольку функции могут создавать исключения не из своего собственного пространства имен. Например, исключение аргумента и т. Д.