Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Обработка исключения для всех методов класса

#c_sharp


Есть класс со множеством методов но при выпадении определенного исключения (в любом
из методов) например IndexOutOfRangeException должен стработать определенный обработчик,
всегда одинаковый для любого метода. Есть ли способ и если есть то как этого можно
добится кроме прописывания try {} catch(){} finaly {} в каждый метод отдельно ?

UPD:
Я пытался в конструктор класса добавить событие UnhandledException:

AppDomain.CurrentDomain.UnhandledException += (s, e) =>
{
    //...обрабатываем исключение 
};


Далее в случайный метод добавил код, который приведет к исключению :

private void Somemethod()
{
    Convert.ToInt32("2.3");
     ....


Исключение выпало но не обработалось, в чем ошибка ?
    


Ответы

Ответ 1



Вы можете использовать AOP-инструменты, например PostSharp. http://doc.postsharp.net/exception-handling Минусы: лезет в скомпилированный код, требует установки у всех, кто будет работать над проектом. Пример: [PSerializable] public class DisplayErrorAttribute : OnExceptionAspect { Type type; public DisplayErrorAttribute(Type type) { this.type = type; } public override Type GetExceptionType(MethodBase method) { return this.type; } public override void OnException(MethodExecutionArgs args) { Console.WriteLine(args.Exception.Message); args.FlowBehavior = FlowBehavior.Return; args.ReturnValue = -1; } } [DisplayError(typeof(IndexOutOfRangeException))] public class Test { public void Foo() { var array = new int[] { 0 }; Console.WriteLine(array[1]); } public void Bar() { var array = new int[] { 0 }; Console.WriteLine(array[1]); } public void Baz() { var array = new int[] { 0 }; Console.WriteLine(array[0]); } } class Program { static void Main(string[] args) { var test = new Test(); test.Foo(); test.Bar(); test.Baz(); Console.ReadKey(); } } Результат: Ошибка в методе Foo: Индекс находился вне границ массива. Ошибка в методе Bar: Индекс находился вне границ массива. 0

Комментариев нет:

Отправить комментарий