如果有一种方法可以将我的所有方法都包装在try catch中,而无需在每个方法中编写try catch。
目前我们正在使用下面提到的方法:
public TValue ErrorHandler<TValue>(Func<TValue> action)
{
try
{
return (TValue)action();
}
catch (Exception ex)
{
//Handle Exception and Log it..........
return default(TValue);
}
}
public void ErrorHandler(Action action)
{
try
{
action();
}
catch (Exception ex)
{
//Handle Exception and Log it..........
}
}
,用作:
public void ClearControls()
{
this.ErrorHandler(() =>
{
//................................
});
}
由于它使用了Lambda,如果在调试时编辑代码,它会强制再次运行应用程序。
请让我知道任何其他可能的解决方案,我可以在所有方法中实现Try Catch并毫不费力地调试我的代码。
答案 0 :(得分:3)
AOP等PostSharp框架可以为您提供帮助。有一篇关于OnExceptionAspect
here。
基本上是最终的结果,而不是将try-catch放入你的方法中,你用一个属性(或者在这种情况下是方面)来装饰方法。
就我个人而言,我从来没有真正使用过这个,因为我只会尝试/捕捉我可以处理的事情,并且从不需要像整个应用程序中的每个方法记录一样的东西。如果你无法处理它,请不要抓住它。
<小时/> 更新:根据您的评论,PostSharp的替代方案是Castle DynamicProxy,这是免费的。关于PostSharp许可证,您应该能够从免费版本获得所需的行为,免费版本涵盖方法级别aspest详细here。
答案 1 :(得分:3)
try-catch
您通常可以在不出现代码错误的情况下看到异常,例如IO操作。如果你包装了所有内容,那可能会使测试和调试更加困难,导致代码质量下降。让臭虫冒出来,及早发现它们。try-catch
中执行的所有其他常见操作,并在try-catch
块中使用该方法。catch
块未处理的异常。答案 2 :(得分:0)
最简单的解决方案是捕获调用者中的错误,或者更进一步,通常是您的Program.cs或global.asax.cs的线程入口点。