Bri*_*Kim 95 c# asp.net using-statement
在下面的示例中,如果在using语句中引发异常,则连接是否会关闭并处理?
using (var conn = new SqlConnection("..."))
{
conn.Open();
// stuff happens here and exception is thrown...
}
Run Code Online (Sandbox Code Playgroud)
我知道下面这段代码会确保它确实如此,但我很好奇使用声明是如何做到的.
var conn;
try
{
conn = new SqlConnection("...");
conn.Open();
// stuff happens here and exception is thrown...
}
// catch it or let it bubble up
finally
{
conn.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
Jef*_*tes 105
是的,using将您的代码包装在try/finally块中,如果该finally部分Dispose()存在,该部分将调用该块.但是,它不会Close()直接调用,因为它只检查IDisposable正在实现的接口,因此检查Dispose()方法.
也可以看看:
Flo*_*bau 19
这就是反射器如何解码代码生成的IL:
private static void Main(string[] args)
{
SqlConnection conn = new SqlConnection("...");
try
{
conn.Open();
DoStuff();
}
finally
{
if (conn != null)
{
conn.Dispose();
}
}
}
所以答案是肯定的,它会关闭连接
DoStuff()抛出一个例外.
| 归档时间: |
|
| 查看次数: |
25473 次 |
| 最近记录: |