Подтвердить что ты не робот

Как разрешить Resharper "неиспользуемое свойство" предупреждение о свойствах исключительно для участников Display/Value?

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

Resharper UsedImplicitly

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

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

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

Ответ 4

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

Ответ 5

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