Как решить "неиспользуемого имущества для 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;
}
}
Я делаю что-то не так или Решарпер ничего не знает об этом конкретном использовании?
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в папке решения.В качестве отступления было бы неплохо иметь возможность добавить
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...
Это отлично сработало для того, что мне было нужно в этом случае, когда я использую неявный механизм для установки значения, но не хочу отключать его в рамках проекта.



Comments