在这种情况下,C# 仍会调用 Dispose 吗?

C# will Dispose still get called in this situation?

下面的代码是否相同,例如 dispose 仍然会被调用?

如果我像这样使用 using 语句,我知道会调用 Dispose:

using (SqlCommand cmd = new SqlCommand(procedureName, sqlConnection))
{
   cmd.CommandType = CommandType.StoredProcedure;
   if (sqlParams != null)
        cmd.Parameters.AddRange(sqlParams.ToArray());

   SqlDataReader rdr = cmd.ExecuteReader();
   return rdr;
}

我的问题是,实际上是同一件事吗:

SqlCommand cmd = new SqlCommand(procedureName, sqlConnection)
using (cmd)
{
   cmd.CommandType = CommandType.StoredProcedure;
   if (sqlParams != null)
        cmd.Parameters.AddRange(sqlParams.ToArray());

   SqlDataReader rdr = cmd.ExecuteReader();
   return rdr;
}

是 - 当代码退出 using() 块时,您可以调用 Dispose() 的任何内容都将被自动处理,包括您在上面给出的示例中。

现在你可以决定了:)

 SqlCommand cmd = new SqlCommand();
        using(cmd)
        {
            cmd.CommandText = "Test command";
            Console.WriteLine("Inside using block-- " +cmd.CommandText);
        }

        Console.WriteLine("Outside using block --" +cmd.CommandText);
        Console.ReadKey();

输出:
内部使用块--测试命令

外部使用块--测试命令

为了更清晰起见,更新了: 肯定会调用 Dispose,这两个示例的区别在于第二个示例您将能够访问 using 块中对象设置的属性。