2011-03-02 9 views
6

읽기 전용 속성 및 해당 속성이 생성자에서 인스턴스화되고 읽기 전용으로 표시된 구체적인 클래스가있는 인터페이스가 있다고 가정 해 보겠습니다. Resharper 방지 "가능한 null 참조 예외"경고

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에서 저를 경고하는 인터페이스를 사용

나는 코드를 호출의 수 null 참조가있을 수있다.

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

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

나는 정의 상 인터페이스가 속성에 값이 있음을 보장하지 않는다는 것을 알고 있습니다. (또한 인터페이스의 속성이 이상적이지 않음을 알고 있습니다.) 그러나 나는이 자산이 언제나 가치가 있다는 것을 안다.

Resharper가 경고를 표시하지 못하게하는 인터페이스에 추가 할 수있는 마법 속성이 있습니까? 차라리 클래스의 모든 사용법을 disable pragma 경고로 꾸밀 필요가 없습니다.

+1

Resharper 제거를 고려하지 않겠습니까? 읽기 전용 멤버를 생성자에서 직접 수행하는 것이 아니라 직접 초기화하여 종료 할 수 있습니다. 그건 같은거야. –

+0

어떤 버전의 ReSharper를 사용하고 있습니까? –

+0

@ 한스, 문제는 구체적인 수업이 아닙니다. – bryanbcook

답변

7

예 : 사용 가능한 속성은 JetBrains.Annotations.NotNullAttribute입니다. 그러나 프로젝트에 ReSharper에 대한 참조를 추가 할 필요는 없습니다. 자체 구현을 사용할 수 있습니다 : ReSharper 옵션을 열고 Code Inspection> Code Annotations에서 "기본 구현을 클립 보드에 복사"를 찾을 수 있습니다. 이제 코드 파일을 프로젝트의 코드 파일에 붙여 넣기 만하면됩니다. 네임 스페이스를 변경할 수도 있습니다.

The Code Annotations settings

그리고 인터페이스 속성의 속성을 때리고.

또한 코드 검사> 설정 아래를 살펴보고 "엔티티가 CanBeNull 속성으로 명시 적으로 표시되거나 Null을 검사 할 때 엔티티가 null 일 수 있음"을 선택해야합니다. 이 방법으로 회원들에게 경고 만합니다.

The Code Inspection settings