我们正在与我们的同事讨论方法名称以“ Try”开头的含义。
有以下意见:
- 当方法可以返回空值时,请使用“尝试”。
- 该方法不会引发异常时,请使用“尝试”。
官方定义是什么?方法名称中的“尝试”是什么意思?是否有关于此的官方指南?
我们正在与我们的同事讨论方法名称以“ Try”开头的含义。
有以下意见:
官方定义是什么?方法名称中的“尝试”是什么意思?是否有关于此的官方指南?
Answers:
这被称为TryParse模式,并且已由Microsoft记录。MSDN的“异常和性能 ” 官方页面显示:
为在常见情况下可能引发异常的成员考虑TryParse模式,以避免与异常相关的性能问题。
因此,如果您的代码具有常规用例意味着可能会引发异常(例如解析int),则TryParse模式是有意义的。
(已更正)有官方指南,如Erik所建议。
当我看到TrySomething
方法时,我认为是
bool
Something
一种方法可以让我自己处理任何异常。(编辑,杰西·韦伯建议)TryFoo
方法,将会有一个类似的Foo
方法让我自己处理任何``异常。这些方法的签名可能会有所不同,因此它们的用法在没有其他代码更改的情况下是不能互换的。
我认为您应该try
继续使用。一个方法是否返回某个值都没关系。
情况1:如果恢复正常,则可以采取某种方式。
情况2:如果不返回:就可以了;您可以采用其他方式进行。
如果您希望该方法的输出有一些值,请使用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方法是一种更安全,更具防御性的编码方式。另外,如果代码片段不是整数,则代码片段2会提高执行性能。
int number = int.Parse(input);
如果您希望它在此情况下更有意义,则应阅读代码段2 。
int number;
在try块和number = ...
赋值之前,您仍然缺少声明。
TryLoadFile(path, out file)
哇声)在RAM 之外有点无关,您仍然可能会抛出异常。因此,呼叫者不会期望路径错误或访问被拒绝而产生任何错误,但会因怪异的事情而出错,这也会出错。并记录下来。
鲍勃叔叔在他的“ 清洁代码”一书中给出了下面的例子。每当我们期望抛出异常时,我们都可以使用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
方法的责任。
TryParse
Microsoft 的模式违反了明确的代码准则,该准则说我们应避免使用输出参数。
如果我们不开发新版本的C#,则不必遵守所有Microsoft准则。有时它们不是最好的。