这个“模式”有名字吗?

2024-03-11

我想知道这个“模式”是否有一个名称,其中方法签名称为 TrySomething,例如int.TryParse, decimal.TryParse, etc.

我的一位同事经常使用这种命名约定——他们不会返回值或抛出异常,而是调用一个方法TryDoSomething如果在处理过程中捕获异常,它将通过 out 参数返回。

编辑:我知道提供的示例不是 TryParse 方法的工作原理。这就是发布此内容的目的...我不知道该怎么称呼它。我同意它看起来更像是一种命名约定,而不是一种模式。感谢所有的投入。

Edit: 有趣的 http://msdn.microsoft.com/en-us/library/ms229009.aspx...

对于在常见场景中可能抛出异常的成员,请考虑使用 TryParse 模式,以避免与异常相关的性能问题。

要实现 TryParse 模式,您需要提供两种不同的方法来执行可能在常见情况下引发异常的操作。第一个方法 X 执行操作并在适当的时候抛出异常。第二种方法 TryX 不会抛出异常,而是返回一个指示成功或失败的布尔值。成功调用 TryX 返回的任何数据均使用 out(Visual Basic 中的 ByRef)参数返回。 Parse 和 TryParse 方法是此模式的示例。


我可能会称之为错误隐藏模式 http://en.wikipedia.org/wiki/Error_hiding。您可以从创建一个TryX当您的代码通常会产生异常,而异常会用布尔值提前终止时。如果您查看框架提供的方法,您会注意到TryX只要编写自己的代码不简单或容易出错(或者应该在框架中经常这样做),就会存在变体IsValidX method.

如果您必须捕获异常,则将其包装在方法中是没有意义的。您所做的只是让调试输入问题变得更加困难。用户可能只会看到,而不是有一个很好的堆栈跟踪来追踪输入失败副作用失败的方法。更糟糕的是,在调试手头的问题时,开发人员可能必须重新创建钝的程序状态才能实现故障模式。

基本上,如果a priori您知道操作会因异常而失败,提供同伴是合乎逻辑且正确的TryX手术。这就是所谓的测试者-实施者图案。Post hoc对操作的分析不是测试者-实施者,但只是简单异常处理.

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

这个“模式”有名字吗? 的相关文章

  • WebClient.DownloadDataAsync 冻结了我的 UI

    我在 Form 构造函数中的 InitializeComponent 之后有以下代码 using WebClient client new WebClient client DownloadDataCompleted new Downloa
  • 元组在 VS2012 中如何工作?

    Visual Studio 2012 功能 tuples但不是可变参数模板 这是如何完成的 如何在不使用可变模板的情况下实现元组 简而言之 微软做了与之前在 NET 中实现类似元组的数据类型完全相同的事情 创建许多版本 每个版本都有固定数量
  • C free() 是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 malloc 和 free 如何工作 https stackoverflow com questions 1119134 how malloc and free work include
  • 进度状态报告模式

    我正在实现需要显示进程栏 或进度百分比 的长时间运行的进程 长时间运行的过程的整体逻辑很复杂 各种分页数据检索 因此 我最终在代码中的不同位置硬编码了大量百分比 在更新完成百分比时 什么被认为是最佳设计模式 我发现 JFace 周围使用的模
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • C++ 将联合强制转换为其成员类型之一

    以下对我来说似乎完全符合逻辑 但不是有效的 C 联合不能隐式转换为其成员类型之一 有人知道为什么不这样做的充分理由吗 union u int i char c function f int i int main u v v i 6 f v
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 在 C++11 中移出 stdpriority_queue 的元素

    最小的工作示例 include
  • 如何在win32中使用GetSaveFileName保存文件?

    我编写此代码是为了获取 fileName 来保存我的文件 include stdafx h include
  • 在 C# 中何时使用 ArrayList 而不是 array[]?

    我经常使用一个ArrayList而不是 正常 array 当我使用时 我感觉好像我在作弊 或懒惰 ArrayList 什么时候可以使用ArrayList在数组上 数组是强类型的 并且可以很好地用作参数 如果您知道集合的长度并且它是固定的 则
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 如何在 C# 中获取 Json 数组?

    我有一个像这样的 Json 字符串 我想将它加载到 C 数组中 当我尝试这样做时 我收到异常 我的字符串 customerInformation customerId 123 CustomerName Age 39 Gender Male
  • doxygen c++:记录由“using”声明公开的私有继承成员

    作为一个例子 我有以下课程 class A public void methodOne class B private A public Brief description using A methodOne 我还没有找到强制 doxyge
  • 使用 xslt 将 xml 转换为 xsl-fo 时动态创建超链接?

    我想使用 xsl 文件在 PDF 报告中创建标题 如果源文件包含超链接 则应将其呈现为超链接 否则呈现为纯文本 例如 我的 xml 如下所示 a href http google com target blank This is the h
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • 如何提高环复杂度?

    对于具有大量决策语句 包括 if while for 语句 的方法 循环复杂度会很高 那么我们该如何改进呢 我正在处理一个大项目 我应该减少 CC gt 10 的方法的 CC 并且有很多方法都存在这个问题 下面我将列出一些例如我遇到的问题的

随机推荐

  • 我正在使用 TestRestTemplate 来测试 @RequestParam 值如何执行

    如何将 RequestParam值发送到url enter code here ApiRestController 公共类 CityController 扩展 BaseController GetMapping cities public
  • JS Puppeteer 等待页面加载完成[重复]

    这个问题在这里已经有答案了 看到这个之后我受到启发 尝试了一下它 但我似乎错误地选择了一个网站作为启动项目 const puppeteer require puppeteer async gt const browser await pup
  • jest.config 被忽略

    我的 jest config js 中有以下内容 module exports preset ts jest presets js with ts testEnvironment jsdom 但当我运行 npm test 时它被忽略 有人可
  • 使 CSS 背景图像变暗? [复制]

    这个问题在这里已经有答案了 应该是一个相当简单的问题 在我的网站中我这样做 landing wrapper display table width 100 background url landingpagepic jpg backgrou
  • 将数据框折叠到一个变量上

    我有一个以下格式的数据框 Site Year Month Count1 Count2 Count3 Patch 1 1 May 15 12 10 1 1 1 May 8 0 5 2 1 1 May 3 1 2 3 1 1 May 4 4 1
  • 如何使用 C api 通过完整路径导入文件?

    PyObject PyImport ImportModule const char name 如何指定完整文件路径和模块名称 Like PyImport SomeFunction const char path to script cons
  • 如何在android中为ViewFlipper设置动态图像?

    我正在这样做 它正在加载静态这些图像 public class ArchiveGroup extends Activity Button btn ViewFlipper flip public void onCreate Bundle sa
  • SQL LIMIT 返回“零” - 0 - 行(PHP 中)

    当查询返回零行时 我在此查询中出现错误 错误号 1064 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在第 3 行 20 20 附近使用的正确语法 从玩家 pl 中选择 pl name pl email 在
  • 在 Webview.clearView() 后多次执行 WebView.loadurl() 会导致崩溃

    在 Webview clearView 之后多次执行 WebView loadurl 会导致崩溃 安卓4 0 3 这是 logcat 输出 Build fingerprint Lenovo P700i P700i 4 0 4 IMM76D
  • 尝试创建一个“值列表”,包括表值及其下面的数字

    所以基本上说我有一个名为 设备 的表 然后其中一列是 数量 如果我想创建一个采用该数字的值列表 假设数量为 4 并且值是 数量 1 直到 gt 0 所以在本例中为 4 3 2 1 我正在使用 Oracle APEX 并且假设我需要基于 sq
  • 如何提取文本字符串中的文本

    我有一个简单的问题 我希望在不使用 VBA 的情况下解决它 但如果这是解决它的唯一方法 那就这样吧 我有一个包含多行 均为一列 的文件 每行都有如下所示的数据 1 7 82E 13 gt gi 297848936 参考 XP 00 4 氢氧
  • Android 通知大图像不起作用

    我正在创建这样的通知 Intent intent new Intent this OfferNotification class PendingIntent pIntent PendingIntent getActivity this 0
  • 之间的区别。 git 中的 (点) 和 * (星号) 通配符

    我有一个本地存储库 并试图放弃自上次提交以来的所有更改 git checkout HEAD 命令 一切工作正常 即使更改是在某个子目录中 但是当我添加一些未跟踪的文件 满足中的掩码 gitignore 对存储库的根目录说 Ignored t
  • 测试 POSIX shell 合规性?

    如何测试 shell 脚本以验证它是否符合 POSIX 标准 我有大量为各种版本的 Bash 和可能的其他 shell 编写的脚本 我希望能够确定哪些完全符合 POSIX 标准 哪些不符合 理想情况下 我想找到类似的东西lint但对于 sh
  • virtualenv 和 pyenv 之间有什么关系?

    我最近学习了如何在工作流程中使用 virtualenv 和 virtualenvwrapper 但我在一些指南中看到了 pyenv 但我似乎无法理解 pyenv 是什么以及它与 virtualenv 有何不同 相似 pyenv 是 virt
  • CSS 未应用于 Visual Studio 2012 设计器?

    我有一些 css 当我的 CSS 文件内时 这些 css 不会应用于 Visual Studio 中的设计器 但会在我发布时应用于页面 这个问题大大减慢了网站开发速度 因为我正在尝试学习 CSS 下面是 CSS 的示例 header bac
  • android 获取CountdownTimer上的剩余时间并使用剩余时间作为分数

    所以我这里有测验应用程序和计时器 所以我想要发生什么 例如 我将计时器设置为 15 秒 如果用户在 5 秒内回答问题 我希望 10 秒的剩余时间变成 10 分 它将添加到之前的分数加上您将获得的分数回答问题 所以现在我有这个 if save
  • 使用 firebaserecycleradapter 过滤 recyclerview

    我有一个带有 FirebaseRecyclerAdapter 的 RecyclerView 当用户开始在 SearchView 中输入内容时 我想用名称列表填充 RecyclerView public class SchoolsAdapte
  • Android 到 PC USB 读/写

    我在 PC 上有一个程序 从 USB 接收字符串输入 旧程序 我有一个 Android 4 X 平板电脑 需要向在 PC 上运行的程序提供 USB 上的字符串输入 当我在 Android 上使用示例代码时 以下代码给出了空的哈希图 PC 在
  • 这个“模式”有名字吗?

    我想知道这个 模式 是否有一个名称 其中方法签名称为 TrySomething 例如int TryParse decimal TryParse etc 我的一位同事经常使用这种命名约定 他们不会返回值或抛出异常 而是调用一个方法TryDoS