Как разрешить предупреждение Resharper «неиспользуемое свойство» в свойствах исключительно для элементов Display / Value? - PullRequest
13 голосов
/ 17 июня 2010

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

Я недавно установил 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 ничего не знает об этом конкретном использовании?

Ответы [ 6 ]

17 голосов
/ 22 июня 2010

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

3 голосов
/ 10 июня 2015

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

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

Resharper UsedImplicitly

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

Adding Resharper Annotations.cs to your project

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

3 голосов
/ 17 июня 2010

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

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

1 голос
/ 17 июня 2010

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

0 голосов
/ 15 марта 2018

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

Using ReSharper menu to disable warning once

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

0 голосов
/ 18 мая 2017

Чтобы установить аннотации 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;
    }
}
...