gpt4 book ai didi

c# - 在另一个 IDisposable "using"语句中处理 IDisposables

转载 作者:行者123 更新时间:2023-11-30 19:17:11 24 4
gpt4 key购买 nike

我对 C# 还是比较陌生,只是在过去几天才接触到“IDisposables”。我可以掌握 using block 的概念来处理必须处理的对象,而无需手动记住调用 .Dispose() 方法 - 方便!

假设我从一个新的 SqlConnection 开始,我在 using 语句中处理它。在该代码块中,我创建了一些额外的 IDisposables,例如 SqlDataAdapter。该适配器是否需要它自己的 using 语句?

例如,如果我有代码...

using (SqlConnection myConnection = new SqlConnection())
{
SqlCommand myCommand = new SqlCommand();
SqlDataAdapter myAdapter = new SqlDataAdapter();
// Do things
}

... myCommandmyAdapter 是否会在处理 myConnection 时被处理(因为它们在该代码块的范围内) ?或者我是否需要多个 using 语句,可能是这样的:

using (SqlConnection myConnection = new SqlConnection())
{
using (SqlCommand myCommand = new SqlCommand())
{
using (SqlDataAdapter myAdapter = new SqlDataAdapter())
{
// Do things
}
}
}

最佳答案

严格来说,确实是全部处理掉最好。但是,您可以通过直接嵌套它们来避免缩进:

using (var myConnection = new SqlConnection())
using (var myCommand = new SqlCommand())
using (var myAdapter = new SqlDataAdapter())
{
// Do things
}

或者,特别是在 ADO.NET 的情况下(公平地说,它确实有很多一次性类型),您可能会发现使用隐藏了大量管道的库之一更容易 - 对于例如,使用“dapper”:

using(var conn = new SqlConnection(...))
{
return conn.Query<Customer>(
"select * from Customers where Region=@region",
new { region }).ToList();
}

关于c# - 在另一个 IDisposable "using"语句中处理 IDisposables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19068082/

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