6

假设我有一个带有只读属性的接口和一个具体类,其中该属性在构造函数中实例化并标记为只读。

internal interface IExample
{
    ObservableCollection<string> Items { get; }
}


internal class Example : IExample
{ 
    private readonly ObservableCollection<string> _items;

    public Example()
    {
       _items = new ObservableCollection<string>();
    }

    public ObservableCollection<string> Items
    {
       get { return _items; }
    }
}

当我使用接口时,Resharper 警告我在调用代码时可能有一个空引用。

public class ExampleWithWarnings
{
    public void Show()
    {
       IExample example = new Example();

       // resharper warns about null reference
       example.Items.Add( "test" );
    }
}

我意识到根据定义,接口并不能保证该属性将具有值。(我也认识到接口上的属性并不理想)。但我知道这个属性总是有价值的。

我可以在界面上放置任何可以防止 Resharper 显示警告的魔法属性吗?我宁愿不必用禁用编译指示警告来装饰类的所有用法。

4

2 回答 2

7

是的,您可以使用一个属性:JetBrains.Annotations.NotNullAttribute. 但是您不需要在项目中添加对 ReSharper 的引用。您可以使用自己的实现:打开 ReSharper 选项,然后在代码检查 > 代码注释下,您将找到“将默认实现复制到剪贴板”。现在只需将其粘贴到项目中的代码文件中即可。您甚至可以更改命名空间。

代码注释设置

然后在接口属性中打属性。

您还应该在代码检查 > 设置下查看并选择“假设实体可以为空......当实体被明确标记为 CanBeNull 属性或检查为空时”。这样,您只会在您明确标记为麻烦的成员中收到警告。

代码检查设置

于 2011-03-02T20:06:00.053 回答
3

您可以将此警告简化为建议。您还可以编辑外部注释文件以创建自定义规则或行为: http: //msmvps.com/blogs/peterritchie/archive/2008/07/21/working-with-resharper-s-external-annotation-xml-files .aspx

于 2011-03-02T20:04:38.357 回答