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