| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Обработка исключений |
| Автор: Хоббит 25.6.2006, 12:59 | ||
Есть класс (допустим выполняющий операции с БД). Есть методы в них может произойти исключительная ситуация... допустим при выполнения sql команды .... надо его обработать на более высоком уровне чем этот метод, да и текст по культурней вывести ... то есть я думаю надо так
Я правильно написал ... просто визуалки рядом нет... не могу проверить! |
| Автор: B3cK 25.6.2006, 13:37 | ||
|
| Автор: arilou 27.6.2006, 17:52 | ||
Хоббит, не так, а вот так:
|
| Автор: Exception 28.6.2006, 00:21 |
Отрывать руки и не приклеивать! Обязательно надо делать свитчи на разные типы исключений, иначе - совать его в InnerException. А то неизвестно - у тебя полетело исключение потому что SQL неправильный или потому что где-то что-то не кастуется. Вот так: |
| Автор: mr.DUDA 28.6.2006, 00:24 |
| З.Ы. могу только проконстатировать, что при постоянном использовании оператора trrow в своих приложениях, производительность серьёзно падает... Это действительно так. |
| Автор: Exception 28.6.2006, 00:24 | ||
P.S. Лично мне нравится свитч из Немерле:
|
| Автор: agl 2.11.2006, 17:59 | ||||
| Поделитесь пожалуйста мыслями, чем обработка исключений(при помощи встроенных классов исключений или написанных программистом) лучше чем обыкновенные проверки в if'ах. Например есть класс Queue и в нем имеется функция get(). В функции надо обработать ситуацию когда пользователь пытается получить из пустой очереди какую то инфу. 1-ый вариант обработки возможной ошибки
2-ой вариант обработки возможной ошибки
очень хотелось бы услышать от опытных людей всегда ли стоит использовать обработку исключений при помощи try / catch / throw, т.к. прога из-за таких обработок оооооооочень тормозит. |
| Автор: ivashkanet 2.11.2006, 18:17 |
| Все зависит от: 1) умеет ли класс, использующий твой метод (get -- тоже метод) правильно распознать произошла ошибка или нет. В твоем случае это Console.WriteLine(" - The Queue is empty.") что вообще никто не словит (если сильно не захочет) и возврат нуля (который теперь исключен из допустимых символов). 2) кто должен отвечать за правильность данных. Тот кто вызывает либо тот кого вызывают. Если первый, то логичнее (и универсальнее) использовать throw (на случай если "профессор--лопух"), если нет, то возможно обработать исключение более мягко и уведомить вызывающий код задокументированным способом. 3) критично ли эта операция. Если это юзверьинтерфейс, то человек особо не заметит задержки произошедшей по вине throw (зато ошибаться будет часто). Если же это автоматическая обработка большого объема данных (даже если не большего), то нужно избежать как можно большего количества throw 4) может кто-нить еще добавит что-нить ИМХО |
| Автор: agl 3.11.2006, 00:42 | ||
ну это не проблема, а просто пример =), в жизни можно сделать errflag например ну и задавать ему true если произошла ошибка. Спасибо за ответ |
| Автор: archimed7592 3.11.2006, 05:19 | ||||
mr.DUDA, а что ты имеешь ввиду под использованием throw? я вот просто подумываю, что будет работать быстрее:
ты имеешь ввиду заключение кода в try...catch ухудшает быстродействие? или непосредственное исполнение оператора throw ухудшает бытродействие? |
| Автор: ivashkanet 3.11.2006, 10:20 |
| archimed7592, непосредственное развертывание стека и поиск оператора который этот throw словит --- вот что замедляет быстродействие Ну попробуй. Я, например, такого исследования не проводил. Хотя, на вскидку, ---- второй будет быстрее, ведь он словит эксэпшен в первом блоке, а в остальные даже не пойдет |