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

本文关键字:属性 扩展 方法 ExceptionHelper | 更新日期: 2023-09-27 17:50:48

目前我有一个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;
            });
        }
    }

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

对于相同的

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

,也可以建议使用其他方法。

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

在我看来,最好的做法是这样做:

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;                      
        }
    }
}

我认为这比你以前的方法(以及任何可能涉及属性的解决方案)更具可读性。当我看到这段代码时,我立即明白您正在捕获异常并对其进行处理,在其他情况下,需要一段时间才能弄清楚。