何时使用方法名称中的“尝试”?

我们正在和我们的同事讨论如果方法名称以“Try”开头,这意味着什么。

有以下意见:

  • 当方法可以返回空值时使用“Try”。
  • 当方法不会抛出exception时使用“Try”。

什么是官方定义? 在方法名称中,“Try”是什么意思? 有关于此的一些官方文字?

这被称为TryParse模式,并已由Microsoftlogging。 正式的例外和性能MSDN页面说 :

考虑可能会在常见情况下抛出exception的成员的TryParse模式,以避免与例外相关的性能问题。

因此,如果你的代码中有一个常规的用例可能会抛出一个exception(比如parsing一个int), TryParse模式是有意义的。

(更正)正如Erik所build议的,有正式的指导方针。

当我看到TrySomething方法时,我假设它

  • 不扔
  • 返回bool
  • 如果我期望值,它通过“out”参数返回
  • 存在的Something方法,让我自己处理任何exception。 (编辑,由Jesse Webbbuild议)

我想你应该try当你想继续。 一个方法是否返回一些值并不重要。

案例1:如果返回正常,可以按某种方式进行。

情况2:如果不回来,情况还不错。 你可以用其他方式继续。

如果您期望某个值作为该方法的输出,则使用out参数。

 int value if (dictionary.TryGetValue("key", out value)) { // Proceed in some way } else { // Proceed in some other way } 

你必须在方法名中使用“Try”,当你想要显示的方法调用可以产生无效的结果的事实。 遵循.NET标准,顺便说一句,不是一个引发exception的函数,而是从程序的angular度来看返回一些VALIDNON_VALID的函数的值。

最后,这一切都是关于您决定在组中使用的命名约定。

请确保在您的方法名中包含try

  • 你不要抛出任何exception
  • 你的方法有以下签名: bool TrySomething(input, out yourReturn)

所以基本上如果我们使用try -methods,我们只会得到一个布尔结果。

所以下面的代码不会抛出任何exception:

 string input = "blabla"; int number; if (int.TryParse(input, out number)) { // wooohooo we got an int! } else { //dooh! } 

而这个代码可以(在这种情况下)会抛出exception:

 string input = "blabla"; int number; try { number = int.Parse(input); //throws an exception } catch (Exception) { //dooh! } 

使用Try方法是一种更安全,更防御性的编码方式。 如果代码段#2不是一个整数,那么执行更多的性能。

我知道一个人,当他被告知这个function在任何情况下都不起作用的时候,通过添加Try来修复他的function。