在这种情况下,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 块中对象设置的属性。
下面的代码是否相同,例如 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 块中对象设置的属性。