我为一个对象定义了两个属性“Name”和“ID”,我将其用于带有BindingList数据源的ComboBox的DisplayMember和ValueMember。
我最近安装了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对这种特殊用法一无所知?
答案 0 :(得分:17)
JetBrains建议你解决这些问题的方式是它们的属性(可从Resharper获得 - &gt;选项 - &gt;代码注释)。将属性添加到项目/解决方案,然后使用UsedImplicitly属性标记这些属性。 Resharper现在假定通过Reflection或后期绑定或其他任何方式使用属性。
答案 1 :(得分:3)
您正在通过反射设置属性(这是上面的代码相当于)。 Resharper只能分析静态行为(有一些非常有限的例外),因此无法知道这些属性实际上是在使用中。
你可以简单地抑制警告。只需单击属性名称并按Alt-Enter,然后选择禁止警告的选项。这将在变量名称周围添加// ReSharper禁用注释。
答案 2 :(得分:3)
只需添加David的答案,在Resharper 8.x及更高版本中,将Resharper.ExternalAnnotations
插件添加到Visual Studio (Resharper -> Extension Manager)
中的Resharper。
当Resharper接下来抱怨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")]
,所以在此期间我们需要发表评论。
答案 3 :(得分:1)
当通过反射使用事物时(我想象的是框架在你的情况下正在做什么),resharper无法分辨(至少在它的当前形式)。
答案 4 :(得分:0)
安装Resharper注释:
PM> Install-Package JetBrains.Annotations
然后您可以通过键入[UsedImplicitly]
或使用上下文菜单(screenshot)
代码示例:
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;
}
}
答案 5 :(得分:0)