2011-03-02 58 views
6

假設我有一個只讀屬性和一個具體類的接口,其中屬性在構造函數中實例化並標記爲只讀。防止resharper「可能的空引用異常」警告

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顯示警告?我寧願不必用禁用編譯指示警告來修飾該類的所有用法。

+1

我不假設你會考慮卸載Resharper?您可以通過直接初始化只讀成員來關閉它,而不是在構造函數中進行。這是同一件事。 – 2011-03-02 20:05:37

+0

您使用的是哪個版本的ReSharper? – 2011-03-02 20:09:05

+0

@Hans,這個問題不是具體的類。 – bryanbcook 2011-03-02 20:09:10

回答

7

是的,您可以使用的屬性爲:JetBrains.Annotations.NotNullAttribute。但是您不需要在項目中添加對ReSharper的引用。您可以使用自己的實現:打開ReSharper選項,然後在Code Inspection> Code Annotations下找到一個「Copy default implementation to clipboard」。現在只需將它粘貼到項目中的代碼文件中即可。你甚至可以改變命名空間。

The Code Annotations settings

然後就打在接口屬性的屬性。

你還應該在代碼檢查>設置下看看,然後選擇「假設實體可以爲空......當實體用CanBeNull屬性明確標記或檢查爲空」時。這樣,您只會在您明確標記爲麻煩的成員中收到警告。

The Code Inspection settings