在C#中,如果在“using”块内发生异常,Dispose方法是否会被调用?
是的,它会被调用。
using
转换为 try-finally
块,因此即使出现可恢复的异常,Dispose
也会被调用。
参见:C# using 语句
使用 using 语句可以确保在调用对象方法时发生异常时仍会调用 Dispose 方法。您可以通过将对象放入 try 块中并在 finally 块中调用 Dispose 来实现相同的结果;实际上,这就是编译器如何将 using 语句转换的方式。
考虑实现了 IDisposable
接口的 SqlConnection
,因此以下代码:
using (SqlConnection conn = new SqlConnection("connectionstring"))
{
//some work
}
将被翻译为
{
SqlConnection conn = new SqlConnection("connectionstring");
try
{
//somework
}
finally
{
if (conn != null)
((IDisposable)conn).Dispose(); //conn.Dispose();
}
}
c# using dispose exception
时,谷歌会返回什么? - I4V