何时使用方法名称中的“尝试”?
我们正在和我们的同事讨论如果方法名称以“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度来看返回一些VALID
或NON_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。