使用ExceptionHelper类作为c#中方法/类级别的属性/扩展/属性

时间:2014-03-18 07:41:23

标签: c# .net exception logging attributes

目前我有Exception helper Class

public class ExceptionHelper
    {
        public static void Catch(Action action)
        {
            try
            {
                action();
            }
            catch (Exception ex)
            {
                // log error and thorw
                // Do what you want
            }
        }      
    }

这用于包装其他类中的方法以捕获和记录像这样的异常

public static class RepoManger1
    {
        public static void TestMethod(string something)
        {
            ExceptionHelper.Catch(() =>
            {
                Int32 testvar1 = 10;
                Int32 testvar2 = 0;
                Int32 testvar3 = testvar1 / testvar2;
            });
        }
    }

我正在考虑将其转换为可在Attribute上定义的class or method 所以我不必在每个方法上都写这个代码。

也可以针对相同的

建议任何其他方法

1 个答案:

答案 0 :(得分:0)

属性旨在提供有关类或方法的额外信息,而如果我理解正确,您希望将具有属性的方法自动包装在异常处理代码中,这是不可能的。

在我看来,这里最好的事情就是这样:

public class ExceptionHelper {
    public static void ProcessException(Exception exc) {
        // common exception handling code 
        // e.g. log error, but DO NOT throw
    }
}

public static class RepoManger1 {
    public static void TestMethod(string something) {
        try {
            // do something
        } catch (Exception exc) {
            ExceptionHelper.ProcessException(exc);
            // if necessary, re-throw the exception HERE, so that
            // people reading your code can see that the exception 
            // is being re-thrown
            throw;                      
        }
    }
}

我认为这比您之前的方法(以及涉及属性的任何可能解决方案)更具可读性。当我查看这段代码时,我立即明白你正在捕捉异常并使用它做一些事情,在其他情况下需要一段时间来弄明白。