C# - Try-Catch-Finally 返回 [重复]

Posted

技术标签:

【中文标题】C# - Try-Catch-Finally 返回 [重复]【英文标题】:C# - Try-Catch-Finally on Return [duplicate] 【发布时间】:2016-03-28 13:43:15 【问题描述】:

我有以下代码:

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 是否会被执行??

谢谢

【问题讨论】:

你可以随时断点。 关闭前需要检查连接状态(是否打开)。避免来自finally 块的错误。 【参考方案1】:

是的。

如此处所述:MSDN

通常,finally 块的语句在控制离开时运行 尝试声明。控制权的转移可能是正常的结果 执行,执行中断、继续、转到或返回 语句,或者从 try 语句中传播异常。

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

【讨论】:

【参考方案2】:

finally 块总是被执行。

你应该 Dispose 在 finally 块中。因为,dispose 也会关闭连接并释放非托管内存资源。

finally

    connection.Dispose();

【讨论】:

【参考方案3】:

是的,确实如此。 无论try catch()块中是否有return语句或抛出异常,都会执行finally块。

【讨论】:

以上是关于C# - Try-Catch-Finally 返回 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

try-catch-finally 后返回

try-catch-finally对返回值的影响

C#常见面试题——try-catch-finally-return

try-catch-finally的执行顺序

try-catch-finally的执行顺序

try-catch-finally