Предотвратить предупреждения Resharper «Возможное исключение нулевой ссылки» - PullRequest
6 голосов
/ 02 марта 2011

Допустим, у меня есть интерфейс со свойством только для чтения и конкретным классом, в котором свойство создается в конструкторе и помечается как доступное только для чтения.

internal interface IExample
{
    ObservableCollection<string> Items { get; }
}


internal class Example : IExample
{ 
    private readonly ObservableCollection<string> _items;

    public Example()
    {
       _items = new ObservableCollection<string>();
    }

    public ObservableCollection<string> Items
    {
       get { return _items; }
    }
}

Когда я использую интерфейс, Resharper предупреждает меня, что у меня может быть возможная нулевая ссылка в вызывающем коде.

public class ExampleWithWarnings
{
    public void Show()
    {
       IExample example = new Example();

       // resharper warns about null reference
       example.Items.Add( "test" );
    }
}

Я понимаю, что по определению интерфейс не гарантирует, что свойство будет иметь значение. (Я также признаю, что свойства на интерфейсах не идеальны). Но я знаю, что это свойство всегда будет иметь значение.

Есть ли какой-нибудь магический атрибут, который я могу добавить в интерфейс, который бы помешал Resharper показывать предупреждение? Я бы предпочел не украшать все виды использования класса предупреждением об отключении прагмы.

Ответы [ 2 ]

7 голосов
/ 02 марта 2011

Да, есть атрибут, который вы можете использовать: JetBrains.Annotations.NotNullAttribute. Но вам не нужно добавлять ссылку на ReSharper в ваш проект. Вы можете использовать свою собственную реализацию: откройте параметры ReSharper, и в разделе «Проверка кода»> «Аннотации кода» вы найдете «Копировать реализацию по умолчанию в буфер обмена». Теперь просто вставьте это в файл кода в вашем проекте. Вы даже можете изменить пространство имен.

The Code Annotations settings

Затем добавьте атрибут в свойство интерфейса.

Вам также следует заглянуть в Code Inspection> Settings и выбрать «Предположить, что сущность может быть нулевой ... когда сущность явно помечена атрибутом CanBeNull или проверена на нулевую». Таким образом, вы получаете предупреждения только от тех участников, которые явно помечены как проблемные.

The Code Inspection settings

3 голосов
/ 02 марта 2011

Вы можете уменьшить это предупреждение до предложения.Вы также можете редактировать внешние файлы аннотаций для создания пользовательских правил или поведения: http://msmvps.com/blogs/peterritchie/archive/2008/07/21/working-with-resharper-s-external-annotation-xml-files.aspx

...