gpt4 book ai didi

c# - using 语句可以用大括号代替吗?

转载 作者:太空狗 更新时间:2023-10-29 20:43:53 24 4
gpt4 key购买 nike

我对 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);
}

SqlConnection 在最后一个 } 大括号后将不可访问。当对象超出范围时会立即调用 Dispose() 吗?

最佳答案

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

不仅如此,如果在 using block 中抛出异常,您将无法进行自动清理。请记住,using block 分解为:

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

如果您真的使用不同的连接并且每个连接都在 block 的末尾处理,我会使用几个 using block :

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

关于c# - using 语句可以用大括号代替吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3635873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com