Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/26: Рейтинг темы: голосов - 26, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 11
1

Список существующих исключений

08.02.2016, 22:51. Просмотров 4739. Ответов 16
Метки нет (Все метки)

Господа, здравствуйте! Требуется помощь.

Нужен список всех (или большей части) существующих исключений.
Покопал MSDN - там только иерархия есть - 10 штук. Остальные сильно разбросаны по базе, собрать все в кучу крайне проблематично.
Поделитесь ссылкой или, если есть, своим перечнем.

Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2016, 22:51
Ответы с готовыми решениями:

Список существующих пользователей
Как программно получить список существующих пользователей

Список существующих функций на VB
Может несколько дурацкий вопрос, но все же... Где можно найти список всех функций VB и их...

Список существующих окон на рабочем столе
Используя функции WINAPI создать приложение, которое выводит список всех существующих на рабочем...

Вывести список существующих на рабочем столе окон
Пожалуйста помогите в решение данной проблемы. Вот задание: вывести в консольное приложение список...

16
Эксперт .NET
13486 / 10450 / 2749
Регистрация: 17.09.2011
Сообщений: 17,763
08.02.2016, 22:56 2
Цитата Сообщение от Splaer Посмотреть сообщение
Нужен список всех (или большей части) существующих исключений.
Да там же на каждый чих исключение — никакого форума не хватит их перечислять.

Из праздного любопытства: а зачем вам?
0
Эксперт .NETАвтор FAQ
9411 / 4611 / 1659
Регистрация: 11.01.2015
Сообщений: 5,810
Записей в блоге: 34
08.02.2016, 22:59 3
Лучший ответ Сообщение было отмечено Splaer как решение

Решение

Цитата Сообщение от Splaer Посмотреть сообщение
Нужен список всех (или большей части) существующих исключений.
C#
1
2
3
4
            foreach (var ass in AppDomain.CurrentDomain.GetAssemblies())
            foreach (var type in ass.GetTypes())
            if (type.IsSubclassOf(typeof(Exception)))
                Console.WriteLine(type);
1
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 11
08.02.2016, 23:08  [ТС] 4
Цитата Сообщение от kolorotur Посмотреть сообщение
Из праздного любопытства: а зачем вам?
Надоело руками обрабатывать исключения и вот это уродство тоже:
C#
1
2
3
4
5
6
try{}
catch{тип исключения}
catch{тип исключения}
catch{тип исключения}
catch{тип исключения}
...
Ну и решил написать небольшой модуль для автоматической обработки исключений, а для этого надо хотя бы пару десятков основных.

Добавлено через 1 минуту
Storm23, Огромное спасибо!
0
Эксперт .NET
13486 / 10450 / 2749
Регистрация: 17.09.2011
Сообщений: 17,763
08.02.2016, 23:10 5
Цитата Сообщение от Splaer Посмотреть сообщение
Надоело руками обрабатывать исключения
А как иначе-то?

Цитата Сообщение от Splaer Посмотреть сообщение
вот это уродство тоже
Дык catch (Exception)

Цитата Сообщение от Splaer Посмотреть сообщение
решил написать небольшой модуль для автоматической обработки исключений
Это как? Исключение — это же определенная ошибка при определенных условиях, которая не всегда и обработана-то может быть.
Как вы можете обработать StackOverflowException, например?
0
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 11
08.02.2016, 23:46  [ТС] 6
Ну StackOverflowException никак не обработать, а вот большинство других же можно - наподобие ArgumentNullExeption, SecurityExeption, FileLoadExeption и прочих, оповещение пользователя и тому подобные стандартные вещи, да и вообще уберечься от падения программы.

По сути обработка исключений внутри любого класса нарушает SOLID, а я хочу избавиться от этого, плюс получается куча дублированного кода, что тоже не "вах".
Сам catch{} будет, но только один, а остальное спрячется и само будет разгребать где, что и что с этим делать + автоматическое логирование и так далее, короче хочу удобства.

Добавлено через 16 минут
Цитата Сообщение от kolorotur Посмотреть сообщение
А как иначе-то?
Если получится что-то похожее на правду - поделюсь
0
Эксперт .NET
7304 / 5048 / 868
Регистрация: 21.01.2016
Сообщений: 19,378
09.02.2016, 06:57 7
Цитата Сообщение от Splaer Посмотреть сообщение
обработка исключений внутри любого класса нарушает SOLID


Добавлено через 1 минуту
Похоже вы как-то по своему, альтернативно понимаете идею обработки ошибок с помощью исключений...
0
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 11
09.02.2016, 09:59  [ТС] 8
Цитата Сообщение от Usaga Посмотреть сообщение
Похоже вы как-то по своему, альтернативно понимаете идею обработки ошибок с помощью исключений...
Нет, так не только я считаю. Мнение вполне логично - есть же принцип единственной ответственности, т.е. максимум, что мы можем сделать поймав исключение - пробросить его дальше.

Разумеется, что я могу ошибаться, но мне кажется, что так правильнее.
0
Эксперт .NET
7304 / 5048 / 868
Регистрация: 21.01.2016
Сообщений: 19,378
09.02.2016, 10:33 9
Цитата Сообщение от Splaer Посмотреть сообщение
максимум, что мы можем сделать поймав исключение - пробросить его даль
Это ещё почему? Исключения - лишь удобный способ обработки ошибок. Удобен он тем, что позволяет выполнить обработку ошибки в другом месте, если в текущем это сделать не представляется возможным. Вот и всё. Если в месте возникновения исключения его можно обработать, то так и следует сделать.

К тому же, у каждой ошибки есть своя "область видимости" вне которой она (ошибка) просто не нужна и непонятна. Почему класс Application должен обрабатывать исключение возникшее где-то в глубинах набора диалоговых окошек при вводе пользователем текста в поле, куда нужно было ввести число? Это-то и есть нарушение SOLID - некая библиотека (в вашем случае) должна "знать" и уметь "разруливать" работу всего кода вашего приложения.

Напомню, если некая структура в коде может самостоятельно справиться с ошибкой, то она это и должна сделать. Никто вне этой структуры знать о ошибке не обязан (если не предусмотрено логикой, конечно).
0
Эксперт .NET
13486 / 10450 / 2749
Регистрация: 17.09.2011
Сообщений: 17,763
09.02.2016, 11:29 10
Цитата Сообщение от Splaer Посмотреть сообщение
максимум, что мы можем сделать поймав исключение - пробросить его дальше.
Только в том случае, если возникновение исключения приводит к тому, что вы не можете выполнить эту единственную ответственность.
Если можете и исключение ожидаемо, то надо ловить и обрабатывать.
Исключения которые можно обработать - кто они и где?
0
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 11
09.02.2016, 20:00  [ТС] 11
Цитата Сообщение от Usaga Посмотреть сообщение
Если в месте возникновения исключения его можно обработать, то так и следует сделать.
Цитата Сообщение от kolorotur Посмотреть сообщение
Только в том случае, если возникновение исключения приводит к тому, что вы не можете выполнить эту единственную ответственность.
Если можете и исключение ожидаемо, то надо ловить и обрабатывать.
Безусловно, когда есть что-то, чему надо сделать .Close() или .Dispose() - это надо делать.

Сейчас попытаюсь объяснить о чем я толкую.

Возьмем простой набор - Windous Forms, MVP.
Некая программка, которая как-то взаимодействует с БД, получаем:
вьюшка, презентер, модель, модуль работы с БД отдающий данные из базы в модель.

У вьюшки предусмотрено некое поле для оповещения пользователя об ошибках.
Имитируем:

Запуск программы -> запуск модели ->модуль работы с БД ->
C#
1
2
3
4
try{...}
catch(нет коннекта){надо оповестить модель - throw}
catch(нет данных){ надо оповестить модель - throw}
...
Как-то обрабатывать это внутри нет никакого смысла, надо передать дальше.
Что теперь происходит в модели:
Отловили мы эти сообщения, теперь надо что-то с ними делать, а делать с ними нам нечего, так как модель понятия не имеет о вьюшке и ничего показать юзеру не может, а значит передаем дальше.
C#
1
2
3
4
try{...}
catch(нет коннекта){надо оповестить презентер - throw}
catch(нет данных){ надо оповестить презентер - throw}
...
Презентер умный, дружит с интерфейсом вьюшки, может заставить ее показать ошибку:

C#
1
2
3
4
try{...}
catch(нет коннекта){_IView.ShowError(...)}
catch(нет данных){ _IView.ShowError(...)}
...
Не очень красиво, но в принципе не смертельно.
Имитируем дальше:

Решили мы, что было бы круто не сразу вычитывать данные из бд, а например сначала читать то, что было сохранено в кеш, показывать это, и при наличии соединения с базой обновлять кеш и показывать обновленные данные (как мобильное приложение ВК).

Получаем:
вьюшка, презентер, модель,
модуль работы с БД;
модуль работы с DataSet;
парсер XML (предположим, что хранить будем в нем).

И вот у нас добавилось по меньшей мере 10 новых возможных исключений. И на что, в конечном счете, будет похож наш презентер? - Он станет жутко толстым и уродливым, + тем же SOLID`ом и пахнуть не будет, так как он наполовину превратиться в обработчик ошибок.

Пример, разумеется, очень утрирован, но суть та же.
0
Эксперт .NET
7304 / 5048 / 868
Регистрация: 21.01.2016
Сообщений: 19,378
09.02.2016, 20:36 12
Данный пример не противоречит ни моему высказыванию, ни высказыванию товарища kolorotur - исключение прошло два уровня на которых оно не может быть обработано и "осело" в презентере, который его и обработал. Всё тут верно. И SOLID тут не нарушается - просто обработка ошибки делегируется другому коду, который с этим справится лучше. Я в этом ничего зазорного не вижу.

Цитата Сообщение от Splaer Посмотреть сообщение
И вот у нас добавилось по меньшей мере 10 новых возможных исключений. И на что, в конечном счете, будет похож наш презентер?
В таких ситуациях, как правило, используется всего несколько обработчиков исключений, а то и вообще один, общий для всех исключений - из исключения вытаскивается описание ошибки и отправляется в UI или в лог. Презентер от это "пухлее" не станет. Так что и тут я проблемы не наблюдаю.
0
0 / 0 / 0
Регистрация: 29.01.2016
Сообщений: 11
09.02.2016, 21:03  [ТС] 13
Цитата Сообщение от Usaga Посмотреть сообщение
В таких ситуациях, как правило, используется всего несколько обработчиков исключений, а то и вообще один, общий для всех исключений - из исключения вытаскивается описание ошибки и отправляется в UI или в лог. Презентер от это "пухлее" не станет. Так что и тут я проблемы не наблюдаю.
Если предположить, что реакции разные, то станет более пухлым.
Собственно все вот это
из исключения вытаскивается описание ошибки и...
я хочу спрятать, сделать возможность "настройки", сделать весь этот процесс более "автоматическим" и так далее.

Поймите меня правильно, я не говорю, что методология обработки, которой все пользуются - плохая, я хочу привнести некоторое удобство. К тому же, я ведь не заставляю всех этим пользоваться. Я поделюсь, кто-то скажет: "ненужная ерунда", а кому-то может и пригодиться.

То, что я набросал на скорую руку, уже сейчас облегчает этот процесс. Я, конечно, не уверен, что это можно будет применить в 100% случаях, но если можно будет применить хотя бы в 50% - уже прогресс.
0
Эксперт .NET
7304 / 5048 / 868
Регистрация: 21.01.2016
Сообщений: 19,378
09.02.2016, 21:15 14
Простите, но я не могу понять вашу задумку. Что можно "спрятать" и "настроить" в обработчике исключения? Обращение к свойству Message объекта исключения? Запись в лог? Или реализовать некую универсальную обработку исключений? Приведите какой-нибудь пример, чтобы стало понятнее.
0
1259 / 960 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
09.02.2016, 21:23 15
майкрософт уже пытались сделать это вот тут https://msdn.microsoft.com/ru-ru/library/dn169621.aspx
(Exception Handling Application Block)
если вкратце это страшная вещь, там можно жонглировать исключениями как мячиками
расписать разные группы исключений в зависимости от слоя приложения (бд, логика, интерфейс и т.п), назначить им свои обработчики, логгеры, названия, описания и тьма прочей мишуры
можно заворачивать исключения в другие, глушить их или наоборот бросать выше и т.п
всё это через xml файл делается

ну и короче закидали мелкомягких помидорами и избили тапками за это творчество, лежит там никто его знать не знает, разве что логгер хоть где-то упоминается
1
Эксперт .NET
7304 / 5048 / 868
Регистрация: 21.01.2016
Сообщений: 19,378
09.02.2016, 21:30 16
Так вот откуда Unity вылез (который DI-контейнер)
0
1259 / 960 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
09.02.2016, 21:35 17
Цитата Сообщение от Usaga Посмотреть сообщение
Так вот откуда Unity вылез (который DI-контейнер)
не только юнити, это предок целого Prism )
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2016, 21:35

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как передать клиенту список существующих подключений?
Пишу чат, подскажите пли-и-из как передать клиенту список существующих подключений(работаю с...

Добавить список существующих файлов и папок в listview
здраствуйте.пишу файл-менеджер.вопрос:как добавить список существующих файлов и папок в listview?...

Где можно посмотреть список всех существующих библиотек для AS? (кроме GitHub)
Есть, например, OpenCV - библиотека алгоритмов компьютерного зрения, обработки изображений с...

Список типичных исключений
Привет. Может у кого-нибудь есть список типичных исключений (кто-нибудь для себя делал)? Например,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.