C# 我应该使用几个嵌套的;使用;骏马?

C# 我应该使用几个嵌套的;使用;骏马?,c#,sql,dispose,using,C#,Sql,Dispose,Using,我想知道是否应该在另一个语句中使用using语句? 例如: using(SqlConnection con = new SqlConnection(...)) { ... using(SqlCommand cmd = new SqlCommand(...)) { } ... } 这两种“使用”都是必要的,还是第一次使用会在完成后处理所有内容?对于要处理的每个对象,都需要使用using语句 我认为,如果您知道using语句通常是在引擎盖下生成的,那么您将

我想知道是否应该在另一个语句中使用using语句? 例如:

using(SqlConnection con = new SqlConnection(...))
{
    ...
    using(SqlCommand cmd = new SqlCommand(...))
    {

    }
    ...
}

这两种“使用”都是必要的,还是第一次使用会在完成后处理所有内容?

对于要处理的每个对象,都需要使用
using语句

我认为,如果您知道
using语句
通常是在引擎盖下生成的,那么您将更好地理解这一点:

myObject m = new myObjecyt()
try
{
   // Code here
}
finally
{
   m.Dispose();
}

在您当前的上下文中,可能希望处置单个using块中包含的每个对象,但在许多其他上下文中,这种行为是不可取的

两者都需要,因为它们是完全独立的,每一个都有自己的变量。如果您有多个连续的using语句,您也可以这样编写它们

using(SqlConnection con = new SqlConnection(...))
using(SqlCommand cmd = new SqlCommand(...))
{
   ...
}

这可能会有帮助:+1:旁注:在某些情况下,使用
可以不使用多个
StreamReader
/
StreamWriter
在大多数情况下,在处理读写器时,将处理与其关联的流。虽然这样的代码不会导致泄漏,但当您对每个
IDisposable
对象使用
时,阅读代码会更好/更容易。您的答案是非常复杂的。实际上,这是一个IDisposable合同应该如何工作的案例。大多数人都会同意,对于所有IDisposables,您应该在“处理完毕”后尽快将其处理掉。在许多情况下,它超出了范围。但是在Rx的情况下,IDisPobles用于控制事件处理程序的生命周期,因此不应立即处理它们。。。这取决于您初始化的资源是什么,以及何时“使用完毕”。。。