我见过一些开发人员在 catch 块中使用 return 语句。为什么/何时这是一种有用的技术?
编辑:我实际上刚刚看到使用了 return 关键字。
谢谢
我见过一些开发人员在 catch 块中使用 return 语句。为什么/何时这是一种有用的技术?
编辑:我实际上刚刚看到使用了 return 关键字。
谢谢
有时你并不关心抛出的异常,只关心 Try 操作失败。一个示例是 TryParse 函数,它在伪代码中如下所示:
try
{
//attempt conversion
return true;
}
catch
{
return false;
}
如果您知道函数的返回值应该在 catch 块中,这将很有用。
例子:
public bool IsDatabaseAvailable() {
try {
// connect
return true;
}
catch (Exception) {
return false;
}
finally {
// clean up
}
}
您可能想要捕获错误,记录它并说返回一个 false 值,表示函数是否成功。在其他情况下,您可能希望返回一些在 try 块中计算的数据
.Net Framework 中的某些方法在格式不正确时会抛出异常。
一个很好的例子是int.TryParse(object value)
如果您的值为“10s”,它将引发异常。在这种情况下,我们知道这是因为无效转换。
所以
try
{
int.TryParse(value);
return true;
}
catch { return false; }
可能是一个函数,它告诉我们字符串是否是有效的整数。
如果您确实为此使用该表单,请不要执行 catch (Exception ex),因为这样做会强制 .Net 序列化对象内部的错误,这有点慢。
同样重要的是要记住,即使您在 try catch 块中使用 return,它仍然会执行 finally 块。
因此,如果您的清理代码在 finally 中,请不要担心框架会确保调用它。
我的 2 美分。N。
公共无效函数(){
try
{
//some code here
}
catch
{
return;
}
}
返回时;命中,执行流程跳出函数。这只能在 void 方法上完成。
编辑:如果您不想执行其余功能,请执行此操作。例如,如果您正在执行文件 IO 并且发生读取错误,则您不想执行处理该文件中数据的代码,因为您没有它。
如果尝试失败,您有其他选择的任何情况。一个例子可能是检查是否file
适用于某些人operation
bool IsComplete = false;
try
{
// FileStream currentWriteableFile =
File.OpenWrite(sFileLocation);
}
catch(Exception)
{
return false;
}