C# Будет ли вызываться Dispose в этой ситуации? - PullRequest
0 голосов
/ 26 мая 2020

Является ли следующий код таким же, например, будет вызывать 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;
}

My вопрос в том, это фактически одно и то же:

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;
}

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Да - все, что вы можете вызвать Dispose (), будет автоматически удалено, когда код выйдет из блока using (), в том числе в приведенном выше примере.

0 голосов
/ 26 мая 2020

Теперь вы можете решить :)

 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.

...