c# – 可以用花括号替换using语句吗?

我使用SqlConnection的using语句.它对性能有好处,因为强制调用Dispose()会更快地释放与池的连接.

但是,我意识到在使用中创建的对象无法重新定义.我不能这样做:

using (SqlConnection connection = new SqlConnection(connectionString))
   {
       connection.Open();
       //...
       connection = new SqlConnection(connectionString2);
       //...
       connection = new SqlConnection(connectionString3);
   }

我想知道我是否可以替换使用,并做这样的事情:

{
       SqlConnection connection = new SqlConnection(connectionString);

       connection.Open();
       //...
       connection = new SqlConnection(connectionString2);
       //...
       connection = new SqlConnection(connectionString3);
 }

在last}括号后,将无法访问SqlConnection.当对象超出范围时,Dispose()会立即被调用吗?

解决方法

不,在第二个例子中,事情不会自动清理(实际上,使用您拥有的代码,您将保持几个连接处于打开状态).

不仅如此,如果在使用块内抛出异常,您将失去自动清理功能.请记住,使用块分解为:

SqlConnection connection = new SqlConnection(connectionString);
try
{
    connection.Open();
    // Do work
}
finally
{
    connection.Dispose();
}

如果你真的使用不同的连接,并且每个连接在块的末尾都是Disposed,我将使用几个使用块:

using(SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    // Do Work
}

// First connection is disposed

using(SqlConnection connection = new SqlConnection(connectionString2))
{
    // Do More Work
}

// Second connection is disposed

using(SqlConnection connection = new SqlConnection(connectionString3))
{
    // Do More Work
}

// Last connection is dipsosed

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...