什么时候应该在C#方法名称中使用“Try”?

时间:2013-06-20 07:28:46

标签: c# naming-conventions

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

有以下意见:

  • 当方法返回空值时,请使用“Try”。
  • 当方法不会抛出异常时使用“Try”。

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

6 个答案:

答案 0 :(得分:142)

这被称为 TryParse 模式,并已由Microsoft记录。 official Exceptions and Performance MSDN page says

  

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

因此,如果您的常规用例意味着它可能会抛出异常(例如解析int),那么 TryParse 模式是有意义的。

答案 1 :(得分:113)

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

当我看到TrySomething方法时,我认为它是

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

答案 2 :(得分:7)

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

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

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

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

实施例

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

答案 3 :(得分:6)

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

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

答案 4 :(得分:5)

如果符合以下条件,请务必在您的方法名称中加入try

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

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

因此以下代码不会抛出任何异常:

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

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

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

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

答案 5 :(得分:0)

鲍勃叔叔在他的书清洁代码中给出了以下示例。每当我们期望引发异常时,我们都可以在方法名称前使用Try前缀:

public void sendShutDown()
{
    try{
        tryToShutDown();
    } catch (DeviceShutDownError e) {
        logger.log(e);            
    }
}

然后(适应):

private void tryToShutDown()
{
    //some code with no error handling, but
    //something might go wrong here
}

tryToShutDown方法不会进行任何错误处理,因为这是sendShutDown方法的责任。

Microsoft的TryParse模式违反了干净代码准则,即我们应避免使用输出参数。

如果我们不开发C#的新版本,则不必遵守所有Microsoft准则。有时它们不是最好的。