我们正在与同事讨论如果方法名称以“Try”开头意味着什么。
有以下几种意见:
官方定义是什么?“Try”在方法名中表示什么?这方面有什么官方的指导方针吗?
正如Erik所建议的,有官方的指导方针。
当我看到TrySomething方法时,我假设它是
TrySomething
bool
Something
当您想要显示方法调用可能产生无效结果的事实时,必须在方法名称中使用“Try”。顺便说一下,遵循。net标准,它不是一个引发异常的函数,而是一个从程序角度返回一些VALID或NON_VALID值的函数。
VALID
NON_VALID
最后,这都是关于您决定在您的组中使用的命名约定。
这被称为TryParse模式,并已被Microsoft记录。MSDN官方例外和性能页面说:
考虑在常见场景中可能抛出异常的成员的TryParse模式,以避免与异常相关的性能问题。
因此,如果您的代码的常规用例意味着它可能抛出异常(例如解析int型),则TryParse模式是有意义的。
我认为你应该使用try当你想继续。方法是否返回某个值并不重要。
try
情况1:如果返回正常,您可以以某种方式继续。
情况2:如果没有返回:仍然正常;你可以用其他方法进行。
如果你希望该方法输出一些值,则使用out参数。
out
int value if (dictionary.TryGetValue("key", out value)) { // Proceed in some way } else { // Proceed in some other way }
确保在你的方法名中包含try,如果:
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! }
然而,这段代码可以(在这种情况下将)抛出异常:
string input = "blabla"; int number; try { number = int.Parse(input); //throws an exception } catch (Exception) { //dooh! }
鲍勃叔叔在他的书干净代码中给出了下面的例子。当我们期望抛出异常时,可以在方法名前使用Try前缀:
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方法的责任。
tryToShutDown
sendShutDown
微软的TryParse模式违反了干净代码准则,该准则说我们应该避免输出参数。
TryParse
如果我们不开发c#的新版本,我们就不必遵守微软的所有指导方针。有时候他们并不是最好的。