如果我有像这样嵌套对象的代码,我是否需要使用嵌套的 using 语句来确保 SQLCommand 和 SQLConnection 对象都被正确处理,如下所示,或者如果实例化 SQLCommand 的代码我没问题在外部 using 语句中。
using (var conn = new SqlConnection(sqlConnString))
{
using (var cmd = new SqlCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = cmdTextHere;
conn.Open();
cmd.Connection = conn;
rowsAffected = cmd.ExecuteNonQuery();
}
}
最佳答案
是的。你可以像这样清理一下
using (SqlConnection conn = new SqlConnection(sqlConnString))
using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand())
{
// code here
}
但您仍然希望为每个 IDisposable 对象使用 using
。
编辑:考虑这个不使用内部 using
语句的示例。
class A : IDisposable
{
public void Dispose()
{
Console.WriteLine("A Disposed");
}
}
class B : IDisposable
{
public void Dispose()
{
Console.WriteLine("B Disposed");
}
}
代码
using (A a = new A())
{
B b = new B();
}
在 block 的末尾,A 被正确处理。 B怎么了?好吧,它超出了范围,只是在等待被垃圾收集。 B.Dispose() 未被调用。另一方面
using (A a = new A())
using (B b = new B())
{
}
当执行离开 block (实际上, block )时,编译代码执行对每个对象的 Dispose() 方法的调用。
关于c# - 使用 using 处理嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2677652/