无论finally块中的内容是什么,它总是被执行(几乎),那么将代码封闭到它或不封闭它之间有什么区别呢?
当前回答
有时您不想处理异常(没有catch块),但希望执行一些清理代码。
例如:
try
{
// exception (or not)
}
finally
{
// clean up always
}
其他回答
啊…我想我明白你的意思了!我花了一点时间……你可能想知道“为什么把它放在finally块中,而不是放在finally块之后,并且完全在try-catch-finally之外”。
例如,这可能是因为抛出错误时您正在停止执行,但您仍然希望清理资源,例如打开的文件、数据库连接等。
因为即使在catch块中不处理异常,finally也会被执行。
假设您需要将光标设置回默认指针,而不是等待(沙漏)光标。如果在设置光标之前抛出异常,并且没有完全崩溃应用程序,则可能会留下一个令人困惑的光标。
最后,语句甚至可以在返回后执行。
private int myfun()
{
int a = 100; //any number
int b = 0;
try
{
a = (5 / b);
return a;
}
catch (Exception ex)
{
Response.Write(ex.Message);
return a;
}
// Response.Write("Statement after return before finally"); -->this will give error "Syntax error, 'try' expected"
finally
{
Response.Write("Statement after return in finally"); // --> This will execute , even after having return code above
}
Response.Write("Statement after return after finally"); // -->Unreachable code
}
有时您不想处理异常(没有catch块),但希望执行一些清理代码。
例如:
try
{
// exception (or not)
}
finally
{
// clean up always
}
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- Java 8: Lambda-Streams,过滤方法与异常
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?