我想知道这个“模式”是否有一个名称,其中方法签名称为 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(使用前将#替换为@)