Как решить "неиспользуемого имущества для ReSharper-это" предупреждение о недвижимости исключительно для показа/члены ценность?



Я определил два свойства "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;
}
}


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

645   6  

6 ответов:

Способ, которым JetBrains предлагает решить эти проблемы, - это их атрибуты (доступные из Resharper -> Options -> Code Annotations). Добавьте атрибуты в проект / решение,а затем отметьте эти свойства с помощью атрибута Usedimplitely. Теперь Resharper предположит, что свойства используются через отражение или позднюю привязку или что-то еще.

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

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

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

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

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

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

Добавление Аннотаций Resharper.CS для вашего проекта

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

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

Для установки аннотаций 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;
    }
}

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

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

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

Comments

    Ничего не найдено.