编写必须一次又一次处理相同异常的代码总是很无聊。
有没有办法编写代码,没有try / catch,并为方法添加属性来捕获(和处理)可能发生的各种异常?这听起来像AOP(Postsharp),这会是理想的解决方案吗?
所以我想编写可以指示异常记录,重新抛出等的位置/方式的类,它们派生自属性和任何基类/接口。然后重新使用它们并将它们应用于整个代码中的不同方法。这将大大提高一致性。
由于
答案 0 :(得分:2)
以下是来自 MS Practices and Patterns 团队的内容。
异常处理应用程序块简介 http://msdn.microsoft.com/en-us/library/ff664698(v=PandP.50).aspx
肯定他们已经有了重新抛出+各种政策的概念。
我推荐它吗?不确定。我查看了他们的实现并最终使用了他们的一些概念。我告诉自己我会回来,但我还没有机会。
答案 1 :(得分:2)
我建议写的方法将委托(例如Func和Action)作为参数。代表们将代表“尝试”块。各个方法将以不同的方式处理委托中发生的异常。
示例:
OverflowHandler(delegate(){ checked{ x+=200; } });
其中OverflowHandler方法将处理OverflowException,并可能记录并重新抛出其他异常。
以下是OverflowHandler方法的外观示例:
public void OverflowHandler(Action func){
try {
func(); // call the delegate
} catch(Exception e){
if(e is OverflowException){
// handle the overflow exception
} else {
// log exception and rethrow
LogException(e);
throw;
}
}
}
答案 2 :(得分:0)
听起来你正在寻找AOP可以提供的功能。根据您的具体目标,您可以通过编写一些辅助方法,而不需要额外的开销,就像Peter O.建议的那样,可以获得很多相同的好处。
我个人并没有发现我有很多重复的异常处理代码,因为Exceptions正好......非常好。它们不应该是正常代码流的一部分,除非有一些非常具体的东西需要响应特定类型的异常,所以最好的策略通常是不要捕获它们,至少在它们涓涓细流之前到你想要记录它们的高级别。