2014-04-11 2 views
-1

와 CollectionPropertiesShouldBeReadOnly 나는 다음과 같은 패턴이 있습니다의 FxCop CA2227 : 개인 설정

public class Test 
{ 
    public ICollection<string> Stuff { get; private set; } 

    public Test() 
    { 
     Stuff = new List<string>(); 
     Stuff.Add("Initial Item"); 
    } 
} 

의 FxCop은 CA2227과 불평 : CollectionPropertiesShouldBeReadOnly합니다. 왜? 세터는 비공개이므로 더 짧고 깔끔한 구문을 제외하고는 비공개 필드를 갖는 것과 다르지 않습니다.

이것은 나를위한 매우 일반적인 패턴이며 각 경고를 개별적으로 표시하지 않거나 필드 + 속성 패턴으로 바꾸고 싶지 않습니다.

이 방법이 있습니까?

+0

문제를 재현 할 수 없습니다. 어떤 버전의 FxCop 및/또는 Visual Studio를 사용하고 있습니까? 어셈블리가 빌드 된 .NET Framework 버전은 무엇입니까? –

+0

VS 2010 Express, FxCop 10 및 .Net 4.0 생각합니다. –

+0

흠 ... 나는 VS 2010에서 빌드 된 .NET 4.0을 대상으로하는 어셈블리에 대해 FxCop 10.0을 사용하여이 작업을 시도했지만 CA2227 위반은 없었습니다. 게시 한 정확한 '시험'수업에 대한 위반 사항이 있습니까? –

답변

-3

문제를 볼 수 있습니다

자체를 해결 한 것으로 보인다.

3

편집 :

예 개인 setreadonly 같아야하고 있지만, FxCorp가 고려하지 않는 것 같아요. 규칙을 무시하거나 readonly과 함께 백업 전용 필드를 가질 수 있습니다. 나는 이것이 당신이 FxCorp 규칙을 안전하게 무시할 수있는 경우라고 생각합니다. 그들은 어쨌든 더 많은 가이드 라인과 같습니다.

또 다른 방법은 개인 ICollection<string>을 갖고 컬렉션에 항목을 추가하고 제거하는 방법을 노출하는 것입니다. 이렇게하면 FxCorp에서 경고가 제거됩니다.

올드 답변 :


개인 set을 가짐으로써, 당신은 클래스 외부에서 새 값으로 설정/초기화 할 방해하고 있습니다,하지만 당신은 사람이 컬렉션에 무엇을 추가하는 것을 방지하지 않습니다 . 수업 외부에서 다음과 같이 할 수 있습니다.

Test t = new Test(); 
t.Stuff.Add("Something"); 

따라서 컬렉션은 읽기 전용이 아닙니다. 또한 this post from Jon Skeet about exposing a collection as a property

+0

규칙과 관련이 없습니다 : "컬렉션을 반환하는 속성은 사용자가 전체적으로 백킹 스토어를 대체 할 수 없도록 읽기 전용이어야하며 사용자는 컬렉션의 관련 메서드를 호출하여 컬렉션의 내용을 수정할 수 있습니다." –

+0

@RichardPayne, 정확하게 FxCorp 오류와 그 번호는 무엇입니까? – Habib

+0

오류 설명은 제목에 있습니다. 번호는 CA2227입니다. –