Является ли следующий шаблон приемлемым? - PullRequest
0 голосов
/ 30 июня 2011

Я пытаюсь найти себе приемлемый шаблон для чтения данных из БД с использованием Enterprise Library. Как вы относитесь к следующей схеме (я имею в виду нулевую проверку в блоке finally)?

IDataReader NewReader = null;

try
{
    NewReader = (SqlDataReader)(SqlDatabase.ExecuteReader(SqlCommand));

    /* Do some work with NewReader. */

    NewReader.Close();
}
catch /* As much 'catch' blocks as necessary */
{
    /* Handle exceptions */
}
finally
{
    if (!ReferenceEquals(NewReader, null))
    {
        NewReader.Dispose();
    }
}

Является ли эта нулевая проверка приемлемой или есть более элегантный способ решения этой проблемы?

Ответы [ 4 ]

5 голосов
/ 30 июня 2011

Я бы использовал if(NewReader == null). Это стандартный способ проверки null. Вы делаете то же самое, но это выглядит странно и может сбить людей с толку.

Кроме того: почему вы не используете using? Делает ваш код намного чище:

try
{
    using(IDataReader NewReader = (SqlDataReader)(SqlDatabase.ExecuteReader(SqlCommand)))
    {
        /* Do some work with NewReader. */
    }
}
catch /* As much 'catch' blocks as necessary */
{
    /* Handle exceptions */
}
4 голосов
/ 30 июня 2011

Это так же, как:

if (NewReader != null) ... 

, который я бы предпочел с точки зрения стиля.

Обновление:

Поскольку NewReader, по-видимому, реализует IDisposable, просто оберните его в конструкцию using.

Пример:

using (var r = new ReaderSomething())
{
  try
  {
  }
  catch {}
}
3 голосов
/ 30 июня 2011

Я бы предпочел использовать блок "using" как:

using(<your reader object>)
{
   //read data from reader
}
0 голосов
/ 30 июня 2011

Просто чтобы добавить немного деталей к тому, что люди сказали выше ...

Используйте блок using, поскольку, независимо от того, возникает исключение или нет, метод Dispose будет автоматически вызываться из-за реализацийIDataReader, который также должен реализовывать IDisposable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...