如何仅针对显示/价值成员解决Resharper对属性的“未使用属性”警告?

时间:2010-06-17 17:03:37

标签: c# visual-studio resharper

我为一个对象定义了两个属性“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对这种特殊用法一无所知?

6 个答案:

答案 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装饰字段/属性。

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 :(得分: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)

我确实使用Resharper机制来评论我需要的特定实例的检查,使用ReSharper的这个过程......

Using ReSharper menu to disable warning once

这对于我需要的东西很有用,我在这里使用隐式机制来设置值但是如果不在项目范围内则不想转。