在C#中,如果在“using”块内发生异常,是否会调用Dispose方法?
答案 0 :(得分:12)
是的,它会被调用。
using
转换为try-finally
块,因此即使在可恢复的异常Dispose
被调用的情况下也是如此。
using语句确保即使调用Dispose也会调用 在对象上调用方法时发生异常。您可以 通过将对象放在try块中来实现相同的结果 然后在finally块中调用Dispose;其实这是怎么回事 using语句由编译器翻译。
考虑实现SqlConnection
接口的IDisposable
,所以:
using (SqlConnection conn = new SqlConnection("connectionstring"))
{
//some work
}
会被翻译成
{
SqlConnection conn = new SqlConnection("connectionstring");
try
{
//somework
}
finally
{
if (conn != null)
((IDisposable)conn).Dispose(); //conn.Dispose();
}
}