首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# - Try-Catch-Finally on Return

C# - Try-Catch-Finally on Return
EN

Stack Overflow用户
提问于 2015-12-22 18:15:50
回答 3查看 20.2K关注 0票数 22

我有以下代码:

代码语言:javascript
复制
public DataTable GetAllActiveUsers()
{
            DataTable dataTable = new DataTable();

            try
            {
                connection.Open();

                SqlCommand getAllActiveUsersCommand = new SqlCommand(getAllUsers, connection);

                SqlDataAdapter dataAdapter = new SqlDataAdapter(getAllActiveUsersCommand);
                dataAdapter.Fill(dataTable);

                return dataTable;
            }
            catch(Exception e)
            {
                Console.WriteLine(e);

                return null;
            }
            finally
            {
                connection.Close();
            }
        }

基本上获取的是我的数据库中的活跃用户。但是谁能向我解释一下,如果Finally块成功运行try块并返回DataTable,它是否会被执行?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-22 18:18:48

是。

如下所述:MSDN

通常情况下,finally块的语句在控制离开try语句时运行。控制权的转移可能是正常执行、break、continue、goto或return语句执行的结果,也可能是try语句之外传播异常的结果。

但是finally块并不总是被执行。你可以读一下Alex Papadimoulis的轶事here

票数 16
EN

Stack Overflow用户

发布于 2015-12-22 18:19:32

是的,确实如此。

无论try {} catch()块中是否有return语句或异常抛出,都将执行finally块。

票数 2
EN

Stack Overflow用户

发布于 2015-12-22 18:33:23

最后,始终执行块。

你应该在finally块中进行处理。因为,dispose还会关闭连接并释放非托管内存资源。

代码语言:javascript
复制
finally
{
    connection.Dispose();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34413370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档