防止Resharper“可能的空引用exception”警告

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

internal interface IExample { ObservableCollection Items { get; } } internal class Example : IExample { private readonly ObservableCollection _items; public Example() { _items = new ObservableCollection(); } public ObservableCollection 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出现警告? 我宁愿不必使用禁用编译指示警告来装饰该类的所有用法。

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

代码注释设置

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

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

代码检查设置

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