2010-07-21 56 views
3

我有时会看到前缀为“Try”的.net框架中的方法,例如int.TryParse(..)。是否有“尝试”惯例?

我认为这意味着该方法与int.parse相同,但包装在try catch中?

这是否意味着如果我写这让他们(例如日志记录,这是我从来没有想抛出一个异常)围绕一个尝试捕捉方法,应以“尝试”,以及前缀?

回答

7

你的假设可能是正确的,但这不是的Try***类型的方法的含义。

的承诺确实是,该方法不会抛出异常(这是如何内部管理无所谓)调用时。

你会发现,这些方法返回一个布尔值,指示是否Try***成功与否。

TryParse方法特别具有out参数,如果成功,该参数将使用解析结果填充。

直接回答的问题:

  • 没有具体约定
  • 如果该方法的语义意味着一个异常不会被抛出,但调用的代码将成功/失败的通知,你可以将其命名Try***因为这是这样一个名字
0

没有与异步操作(BeginXXX EndXXX)同义的约定,但它用于区分将与其他代码执行相同操作但不会抛出异常的代码(通过吞吐异常或不生成它们。

如果你的代码是不提供异常处理的另一种方法替代,我会尝试前缀,因为它多少有些 - 和.NET的人会先假定它是行为不会抛出异常。

这可通过返回一个成功的布尔和放置的返回值作为out参数再增强。

要回答这个问题 - 它不应该放在任何处理异常的方法周围;只有在逻辑上合理地提供我概述的行为的情况下,当前由.NET Framework中的某些实例提供的行为。

0

的int.TryParse方法隐含的那种行为并不等同于包装纸的try/catch在性能方面int.parse。 int.TryParse的目的是为了避免异常抛出导致的性能影响,所以将int.TryParse作为int.parse实现用try/catch包装没有意义。