消除重复的 try/catch 代码

2024-04-03

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

有没有一种方法可以在不使用try/catch的情况下编写代码,并向方法添加属性来捕获(并处理)可能发生的各种异常?这听起来像 AOP(Postsharp),这会是理想的解决方案吗?

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

Thanks


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

Example:

 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;
       }
    }
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

消除重复的 try/catch 代码 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • JAVA数组内不重复的随机数

    我想在一个数组中生成 6 个数字 同时对其进行比较 这样它们就不会相同或没有重复的数字 例如 我想以任意顺序生成 1 2 3 4 5 6 最重要的是不重复 所以我的想法是将生成的数组中的当前数组一一比较 如果数字重复 它将重新运行该方法并再
  • 在 Python 中用多边形计算 Pi

    我在精确计算 Pi 时遇到问题 我使用的方法是 我得到一个半径为 1 的圆 并在其内部放置具有 8 16 32 64 角的多边形 在每个步骤后将它们加倍 但问题是结果只有前15位小数是正确的 这是程序 import math import
  • 如何在reason-react组件中添加版权符号?

    我是理性反应新手 我正在尝试将版权符号放入反应原因组件中 我试过了 span ReasonReact stringToElement copy span 但这并没有给我 符号 简单的说 copy 如果你不放 不起作用
  • 为什么要将对象的副本作为函数的参数?为什么 const ref 不是参数的默认方式?

    尽管我非常喜欢 C 编程 但有一件事我确实不明白 对我来说 最常见的函数编程方式似乎是这样的 some function a variable do something according to the data in the variab
  • Xcode 10、sourcery 和 swiftlint 构建阶段顺序

    更新到 Xcode 10 后 初始项目配置存在一些问题 步骤如下所示 使用生成一些文件Sourcery https github com krzysztofzablocki Sourcery 棉绒与SwiftLint https githu
  • 我的特殊字符在 WordPress 中显示为 ’

    如何让我的特殊字符在 WordPress 上正确显示 My are being converted to 8217 所有特殊字符都会发生这种情况 有什么功能或者插件可以修复吗 您可以使用htmlspecialchars decode htt
  • Visual Studio C# 语句崩溃

    当编辑很长的代码块时 无论如何肯定应该重构 但这超出了这个问题的范围 我经常渴望能够折叠语句块 就像折叠功能块一样 也就是说 如果减号图标出现在大括号内的所有内容的代码大纲上 那就太好了 它似乎出现在函数 类 区域 命名空间 使用中 但不适
  • 中包含子包的语法是什么?

    我正在使用Spring并且我有一个很长的子包列表 我是否必须在包中一一指定它们
  • Android上批量获取大量位图资源

    我有一长串图形 icon1 0 png icon1 1 png icon1 2 png icon12 0 png icon12 1 png icon12 2 png 我想将它们打包到我的android应用程序中 理想情况下 我认为我应该能够
  • 如何从 C++ DLL 中的 C# 简单函数调用

    我在 C 中有一个简单的函数 不是类的方法 declspec dllexport extern C void stdcall TestFunc 我尝试从 C 调用它 DllImport ImportTest dll public stati
  • 将语料库转换为R中的data.frame

    我正在使用 tm 包来应用词干提取 并且需要将结果数据转换为数据框 可以在这里找到解决方案R tm包vcorpus 将语料库转换为数据帧时出错 https stackoverflow com questions 24703920 r tm
  • 检查数组中是否存在元素

    PHP中有一个函数叫做isset http php net isset检查某些内容 例如数组索引 是否存在并且具有值 Python 怎么样 我需要在数组上使用它 因为有时我会收到 IndexError 列表索引超出范围 我想我could使用
  • 删除“搜索”选项,但保留“搜索列”选项

    我想从我的应用程序中删除 全局搜索 选项 但保留 列搜索 选项 有任何想法吗 我尝试过不同的参数 例如searching FALSE filtering none 这些都不能正常工作 My code server R library shi
  • MVC中VIEWDATA和VIEWBAG存储在哪里?

    我对 MVC 非常陌生 在 ASP Net 中 存在状态管理技术 其中视图状态或 cookie 存储在客户端中 会话存储在服务器中 类似地 我们在 MVC 中有 Viewbag ViewData 和 TempData cookie 和会话也
  • iOS setValue withCompletionBlock 未调用

    在设置值时 我遇到了一些在 iOS 模拟器和设备 上未调用的completionBlocks 例如 void addShortUserPlaylistUrl NSString playlistId playlistName NSString
  • Plotly.py:在行之间填充,正/负不同颜色

    使用 Plotly 我可以轻松绘制两条线并填充它们之间的区域 import plotly graph objects as go fig go Figure fig add trace go Scatter x 1 2 3 4 y 1 2
  • 如何将 Git 子模块指针恢复到存储在包含存储库中的提交?

    我的主 git 存储库中有一个 git 子模块 据我了解 主存储库存储一个 SHA 值 某处 指向它 链接到 的子模块的特定提交 我进入我的子模块并输入git checkout some other branch 我不知道我来自哪个提交 我
  • 使用 Python 更新媒体 wiki 文章?

    你好 我有一个 cron 作业 它收集有关服务的一些统计信息 我需要 cron 作业以编程方式更新媒体 wiki 页面 附加到页面 我在 cron 中使用 python 那么我最好的选择是什么 是否有 mediawiki python 库的
  • 数据绑定后如何隐藏gridview列?

    我使用以下链接中的解决方案隐藏我的列 如何隐藏 GridView 中的 TemplateField 列 https stackoverflow com questions 4954871 how to hide a templatefiel
  • 消除重复的 try/catch 代码

    编写必须一次又一次处理相同异常的代码总是很无聊 有没有一种方法可以在不使用try catch的情况下编写代码 并向方法添加属性来捕获 并处理 可能发生的各种异常 这听起来像 AOP Postsharp 这会是理想的解决方案吗 因此 我想编写