Как устранить предупреждение ReSharper о неиспользуемом свойстве только для свойств Display/Value Members?

Я определил два свойства, Name и ID, для объекта, который я использую для DisplayMember и ValueMember ComboBox с источником данных BindingList.

Недавно я установил ReSharper, чтобы оценить его. ReSharper предупреждает меня об объекте, что два свойства не используются.

Образец кода:

BindingList<ClassSample> SampleList = new BindingList<ClassSample>();
// populate SampleList
cmbSampleSelector.DisplayMember = "Name";
cmdSampleSelector.ValueMember = "ID";
cmbSampleSelector.DataSource = SampleList;

private class ClassSample
{
    private string _name;
    private string _id;

    public string Name // ReSharper believes this property is unused
    {
        get { return _name; }
    }

    public string ID // ReSharper believes this property is unused
    {
        get {return _id; }
    }

    public ClassSample(string Name, string ID)
    {
        _name = Name;
        _id = ID;
    }
}

Я делаю что-то не так или ReSharper ничего не знает об этом конкретном использовании?


person JYelton    schedule 17.06.2010    source источник


Ответы (6)


JetBrains предлагает решать эти проблемы с помощью их атрибутов (доступных в ReSharper -> Параметры -> Аннотации кода). Добавьте атрибуты в свой проект/решение, а затем пометьте эти свойства атрибутом UsedImplicitly< /а>. ReSharper теперь будет предполагать, что свойства используются через Reflection, позднее связывание или что-то еще.

person David Williams    schedule 22.06.2010

Просто чтобы добавить к ответу Дэвида, в Resharper 8.x и более поздних версиях добавьте плагин Resharper.ExternalAnnotations в Resharper в Visual Studio (Resharper -> Extension Manager).

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

Решарпер используется неявно

Затем вы можете либо напрямую добавить ссылку на JetBrains.Annotations.dll в свой проект, либо позволить Resharper добавить в ваш проект небольшой файл Annotations.cs, содержащий определение Attribute (и другие, подобные NotNullAttribute). Файл Annotations.cs находится под значком Properties в папке решения.

Добавление Resharper Annotations.cs в ваш проект

Кроме того, было бы неплохо иметь возможность добавить Description к атрибуту, например. [UsedImplicitly(Description="Used by NUnit Theory / Reflected by Xyz, etc")], так что пока нам нужно прокомментировать.

person StuartLC    schedule 10.06.2015

Вы устанавливаете свойства с помощью отражения (это то, к чему приводит приведенный выше код). ReSharper может анализировать только статическое поведение (с некоторыми очень ограниченными исключениями), поэтому он не может знать, что эти свойства действительно используются.

Однако вы можете просто подавить предупреждения. Просто щелкните имя свойства и нажмите Alt+Enter, а затем выберите параметр, чтобы скрыть предупреждение. Это добавит комментарий // ReSharper disable вокруг имени переменной.

person Adrian Grigore    schedule 17.06.2010
comment
Я обнаружил комментарии с предупреждением о подавлении, однако пример довольно упрощен; есть много таких выпадающих списков с различными объектами и т. д. Я бы предпочел не добавлять столько комментариев. Есть ли другой способ установить элементы отображения и значения, которые не полагаются на отражение? - person JYelton; 17.06.2010
comment
JYelton: Не то, чтобы я знал об этом. В крайнем случае вы также можете подавить предупреждение глобально. - person Adrian Grigore; 17.06.2010
comment
Вы также можете подавить предупреждения на уровне файлов. - person ErikE; 04.12.2015

Когда что-то используется через отражение (что, как я полагаю, делает фреймворк в вашем случае), ReSharper не может сказать (по крайней мере, в его текущей форме).

person µBio    schedule 17.06.2010
comment
Есть ли другой способ установить элементы отображения и значения, которые не полагаются на отражение? - person JYelton; 17.06.2010
comment
Нет, я обычно подавляю с помощью комментария, а затем перемещаю пару комментариев начало/закрытие, чтобы подавить для всего класса. - person µBio; 17.06.2010

Я использовал механизм ReSharper для комментирования этой проверки для конкретного экземпляра, который мне также был нужен, используя этот процесс с ReSharper:

Использование меню ReSharper для однократного отключения предупреждения

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

person Carlos Rodriguez    schedule 15.03.2018

Чтобы установить аннотации ReSharper:

PM> Install-Package JetBrains.Annotations

Затем вы можете добавить атрибуты, введя [UsedImplicitly] или используя контекстное меню (скриншот) .

Пример кода:

using JetBrains.Annotations;
class ClassSample
{
    private string _name;
    private string _id;

    [UsedImplicitly]
    public string Name // ReSharper believes this property is unused
    {
        get { return _name; }
    }

    [UsedImplicitly]
    public string ID // ReSharper believes this property is unused
    {
        get { return _id; }
    }

    public ClassSample(string Name, string ID)
    {
        _name = Name;
        _id = ID;
    }
}
person Wouter van Rij    schedule 18.05.2017