假设我有一个只读属性的接口,以及一个具体的类,其中属性在构造函数中实例化并标记为只读。
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显示警告吗?我宁愿不必使用禁用编译指示警告来修饰该类的所有用法。
答案 0 :(得分:7)
是的,您可以使用以下属性:JetBrains.Annotations.NotNullAttribute
。但是您不需要在项目中添加对ReSharper的引用。您可以使用自己的实现:打开ReSharper选项,并在Code Inspection&gt;下。代码注释您将找到“将默认实现复制到剪贴板”。现在只需将其粘贴到项目的代码文件中即可。您甚至可以更改名称空间。
然后在接口属性中拍打属性。
您还应该查看代码检查&gt;设置并选择“假设实体可以为null ...当实体明确标记为CanBeNull属性,或检查为null”时。这样,您只会在明确标记为麻烦的成员中收到警告。
答案 1 :(得分:3)
您可以将此警告减少为建议。您还可以编辑外部注释文件以创建自定义规则或行为:http://msmvps.com/blogs/peterritchie/archive/2008/07/21/working-with-resharper-s-external-annotation-xml-files.aspx