ReSharper показать предупреждение с SqlDataReader - PullRequest
1 голос
/ 14 июня 2010

Когда я пишу что-то вроде этого:

using (var connection = new SqlConnection("ConnectionString"))
{
    using(var cmd= new SqlCommand("Command"))
    {
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
            }
        }
    }
}

ReSharper показывает предупреждение на reader.Read() и сообщает, что читатель может иметь значение null.

Но в каких случаях он может быть нулевым?Как я знаю, если команда ничего не возвращает, читатель не равен нулю, у него только ничего нет.

Ответы [ 2 ]

5 голосов
/ 14 июня 2010

Учитывая, что об этом в YouTrack сообщается как об ошибке (дважды - здесь и здесь ), похоже, что аннулированные аннотации, поставляемые с R #, в этом отношении недостаточны.

Загляните в папку ReSharper_installation_dir\Bin\ExternalAnnotations - здесь устанавливаются файлы аннотаций.Для меня, с v5, здесь есть файл System.Data\System.Data.Nullness.xml, который содержит эту аннотацию:

<member name="M:System.Data.SqlClient.SqlCommand.ExecuteReader">
  <attribute ctor="M:JetBrains.Annotations.CanBeNullAttribute.#ctor" />
</member>

Если по вашей собственной проверке вы убеждены, что это неправильно, и что SqlCommand.ExecuteReader никогда не возвращает ноль, вы должны изменить это на

<member name="M:System.Data.SqlClient.SqlCommand.ExecuteReader">
  <attribute ctor="M:JetBrains.Annotations.NotNullAttribute.#ctor" />
</member>
1 голос
/ 14 июня 2010

Я думаю, что это не может быть нулем - но Resharper не знает, что SqlCommand.ExeuteReader() никогда не вернет ноль.
Насколько я знаю, есть какой-то xml, который они используют, чтобы сказать, что функции ведьмы могут возвращать или не возвращать ноль, и его можно установить там. Хотя я не знаю названия и местоположения xml.

...