c# - 消除重复的 try/catch 代码

标签 c# aop

编写必须一次又一次处理相同异常的代码总是很无聊。

有没有办法不用try/catch写代码,在方法中添加属性来捕获(和处理)可能发生的各种异常?这听起来像 AOP (Postsharp),这是理想的解决方案吗?

所以我想编写一些类来指示在何处/如何记录、重新抛出异常等,并且它们派生自属性和任何基类/接口(interface)。然后重新使用这些并将它们应用于整个代码中的不同方法。这将大大提高一致性。

谢谢

最佳答案

我的建议是编写将委托(delegate)(例如 Func 和 Action)作为参数的方法。代表将代表“try” block 。各个方法将以不同方式处理委托(delegate)中发生的异常。

例子:

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

关于c# - 消除重复的 try/catch 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6714172/

相关文章:

c# - 如何将事件传递给 C# 中的函数?

c# - 使用动态对象时出现 RuntimeBinderException

c# - facebox不是asp.net主页中的功能

c# - PostSharp 方面解析类型

Java自定义注解在调用被注解的方法之前调用其他一些方法

c# - 如何使用 ContinueWith 处理任务取消?

c# - 从 asp.net 代码隐藏操作 HTML

java - 将方面添加到实现类而不是接口(interface)

java - 字符串 setter 的 Spring AOP 切入点定义

spring - 在 DAO 中执行 Spring AOP 环绕通知在服务中返回 null