什么时候"尝试"应该用在C#方法名称中?

ms0*_*007 172 c# naming-conventions

如果方法名称以"Try"开头,我们正在与我们的同事讨论它意味着什么.

有以下意见:

  • 当方法可以返回空值时,请使用"Try".
  • 当方法不会抛出异常时使用"Try".

什么是官方定义?"尝试"在方法名称中说什么?有关于此的官方指南吗?

Eri*_*oom 145

这被称为TryParse模式,并已由Microsoft记录.该官员异常和性能MSDN页说:

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

因此,如果你有一个常规用例意味着它可能抛出异常(例如解析int)的代码,那么TryParse模式是有意义的.

  • 它是基本的东西,但这并不意味着指南没用.如果你不太了解平台,那么获得基本的东西可能会非常困难. (18认同)
  • +1.只是为了补充一点,例外通常是针对"特殊"情况.如果你做的事情很容易失败并且失败并不是特别值得注意的话,那么使用这种模式比try/catch更加惯用 (5认同)
  • 记录此模式的另一个有用链接(搜索TryParse)http://blogs.msdn.com/b/kcwalina/archive/2005/03/16/396787.aspx (2认同)
  • 基本上,如果您有TryParse方法,则应该有一个在TryParse返回false时抛出的Parse方法。相反,如果您具有Parse方法,则应考虑使用TryParse方法,当Parse抛出异常时该方法返回false (2认同)

not*_*row 117

(更正)正如Erik建议的那样,有正式的指导方针.

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

  • 不扔
  • 回报 bool
  • 如果我期望值,则通过'out'参数返回
  • 存在Something方法,允许我自己处理任何异常.(编辑,Jesse Webb建议)

  • +1但我也有第四个期望:如果有一个`TryFoo`方法,会有一个类似的`Foo`方法,它允许我自己处理任何``例外.这些方法的签名可能会有所不同,因此如果没有其他代码更改,它们的用法将无法互换. (8认同)
  • 更正 - 它有官方指南.见Erik的回答. (4认同)

Ash*_*ani 7

我想你应该try在你想继续时使用.方法返回某个值并不重要.

案例1:如果它返回正常,你可以以某种方式继续.

案例2:如果它没有返回:它仍然很好; 你可以用其他方式继续.

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

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


Tig*_*ran 6

当你想要表明方法invokation可能产生无效结果的事实时,你必须在方法名称中使用"Try".继.NET标准是,顺便说一句,而不是引发异常的函数,但返回的一些功能VALIDNON_VALID从程序的角度来看,价值.

最后,这一切都与您决定在组中使用的命名约定有关.


Fab*_*ler 5

确保try在您的methodname中包含以下内容:

  • 你没有抛出任何异常
  • 您的方法具有以下签名: bool TrySomething(input, out yourReturn)

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

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

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

而这段代码可以(在这种情况下)抛出异常:

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

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