![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| HAL707 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 6.9.2007 Репутация: 1 Всего: 4 |
Привет всем.
Столкнулся я с проблемой. Короче есть класс, с кучей методов. Возвращаемое значение и сигнатура у всех разные. Существует вероятность, что все эти методы в какой-то момент времени кидают одно и тоже исключение. Оборачивать вызов каждого метода в try catch и каждый производить одни и те же действия мне бы не хотелось. Вопрос в том, как написать такой класс, который сам совит эксепшны для всех методов, а возвращает только результат - успешно, неуспешно? Например есть вызов метода метода: string AnyMethod(string param1) Он кидает эксепшн. Нужно преобразовать его в bool AnyMethod(string param1, out result) в описании AnyMethod нельзя использовать Try-catch как? |
|||
|
||||
| IGV |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 1.4.2008 Репутация: 1 Всего: 2 |
Если честно, то я не очень понял чего Вы всё-таки хотите добиться.
Как вариант можно обойтись вообще без исключений: добавить в класс переменную состояния, которая будет содержать текст сообщения например
Если случается в методе исключительная ситуация, метод прекращает свою работу и меняет состояние на Error и в Message пишет какую-то информацию для Вас. После вызова метода проверяете его состояние и принимаете решение о дальнейших действиях. |
|||
|
||||
| HAL707 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 6.9.2007 Репутация: 1 Всего: 4 |
Я хочу чтобы все исключения обрабатывались в единственном методе.
Поясню на примере. Есть класс с двумя "опасными методами" string anyclass.Method1() string anyclass.Method2() Пишем такой код:
Все эксепшны обрабатываются в одном месте. Красота. Но это катит только тогда, когда у метода 1 ретурн-параметр и он ничего не принимает. А методов много, у всех параметры разные, и некоторые ничего не возвращают. Это сообщение отредактировал(а) HAL707 - 13.8.2009, 13:12 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
HAL707
Убило это что еще?? так прямо пучком все методы экзепшны кидают совместными усилиями? Сегодня вечером, группа методов микрософтовской реализации, по предварительному сговору..умышленно бросили исключение на произвол судьбы. По данному вопросу было возбуждено два программиста и один менеджер среднего звена. Экзепшн пойман, ведется следствие. Все экзепшны наследуют от Exception, лови его в функции Main, если речь конечно об этом А чтобы класс сам ловил исключения..это вы уважаемый научной фантастики начитались Это сообщение отредактировал(а) azesmcar - 13.8.2009, 13:29 |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Если именно что-то конкретное вызывает сие: то в условии при котором сие происходит сделайте throw Ваше_Исключение
Создайте своё исключение и обработайте... А вообще-то, то что сказал предыдущий оратор похоже на правду -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| HAL707 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 6.9.2007 Репутация: 1 Всего: 4 |
Стоп.
Если бы я хотел ловить его в функции main, я бы там его бы и ловил. В определенный момент (когда сервер отваливается) методы класса (все) кидают ComException. Я, не хочу в функции main оборачивать каждый вызов в try-catch. А что я хочу, написано мной выше. Еще раз спрашиваю, возможно ли это сделать? |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Скажу еще один раз, ВСЕ ВМЕСТЕ exception не кидают. Нет, ну можно конечно создать по одному потоку на каждый метод и каждый будет генерировать по исключению, будет очень весело определенно, но не практично, сомневаюсь что в микрософт на такое способны. Это делает кто-то один и сваливает вину на других, надо его найти и надавать по попе. Покажи код и расскажи нормально что происходит, написанное тобой ни хрена мне (я так думаю не только мне) не говорит.
Я об этом и говорю, не надо каждый вызов заворачивать, возьми всю функцию в один try-catch. Это сообщение отредактировал(а) azesmcar - 13.8.2009, 16:11 |
||||
|
|||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
каким-то чудовищным непониманием сквозит топик
azesmcar, речь вовсе не о том, что все методы в один момент времени вдруг кидают исключение, и не о том, можно ли всю функцию завернуть в try-catch - конечно можно! дело в другом - есть некий com-объект, который славится киданием исключений, и совсем не хочется каждый его вызов заворачивать в try-catch, вместо этого хорошо бы написать обобщённый "выполнятель" этих методов, который мог бы отловить и обработать исключение HAL707, к сожалению, void не признаётся разработчиками шарпа как тип возвращаемого значения, так что там, где ничего не возвращается, нужно будет использовать Action вместо Func а с количеством праметров проблем нет и в твоём варианте -
ещё на какие-нибудь мысли может навести эта тема |
|||
|
||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Ну это тебе сейчас что-то понятно, на момент написания мною сообщения тут было первое сообщение
и вместо второго сообщения было только
но автор вместо того, чтобы написать новый пост (чтобы люди заметили), решил отредактировать старый, на который уже никто и внимания не обращал.
заметь, это не я придумал, так написано Это сообщение отредактировал(а) azesmcar - 13.8.2009, 17:02 |
||||||
|
|||||||
| HAL707 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 6.9.2007 Репутация: 1 Всего: 4 |
mihryak в теме
А насчет все эти методы в какой-то момент времени кидают одно и тоже исключение... Ну неудачно выразился. Имелось ввиду, что при вызове любого из методов, прилетит одно и тоже исключение. но автор вместо того, чтобы написать новый пост (чтобы люди заметили), решил отредактировать старый, на который уже никто и внимания не обращал. Ну не успеешь отредактировать, уже все прочитают |
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
HAL707, Policy Injection Application Block + The Exception Handling Handler. Или любая другая AOP-примочка.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |