在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
这样我就不必在每个方法上都写这段代码了。
对于相同的
属性意味着提供关于类或方法的额外信息,然而,如果我理解正确的话,您希望带有属性的方法自动包装在异常处理代码中,这是不可能的。
在我看来,最好的做法是这样做:
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;
}
}
}
我认为这比你以前的方法(以及任何可能涉及属性的解决方案)更具可读性。当我看到这段代码时,我立即明白您正在捕获异常并对其进行处理,在其他情况下,需要一段时间才能弄清楚。