2010-06-14 3 views
1

Когда я пишу что-то вроде этого:ReSharper показать предупреждение с SqlDataReader

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

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

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

+0

+1 Я тоже это заметил. Возможно, вы должны спросить людей в JetBrains напрямую. –

ответ

5

Учитывая, что об этом сообщается на YouTrack как об ошибке (дважды - here и here), похоже, что аннотации недействительности, которые поставляются вместе с 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 никогда не возвращает NULL, вы должны изменить это

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

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

Смежные вопросы