public Dictionary<string, string> Data { get; set; }
위의 코드 줄에서는 스타일 복제 오류가 발생합니다. CA2227 컬렉션 속성은 읽기 전용이어야합니다.사전을 사용하여 CA2227은 무엇입니까?
Stylecop 억제를 추가하거나 자신의 읽기 전용 사전 클래스를 만들지 않고이 오류를 지나갈 수있는 방법이 있습니까?
public Dictionary<string, string> Data { get; set; }
위의 코드 줄에서는 스타일 복제 오류가 발생합니다. CA2227 컬렉션 속성은 읽기 전용이어야합니다.사전을 사용하여 CA2227은 무엇입니까?
Stylecop 억제를 추가하거나 자신의 읽기 전용 사전 클래스를 만들지 않고이 오류를 지나갈 수있는 방법이 있습니까?
"set"키워드 만 제거하면됩니다. 다음과 같이 설정하십시오.
private readonly Dictionary<string, string> data = new Dictionary<string, string>();
public Dictionary<string, string> Data { get { return this.data; } }
종종 컬렉션을 재 할당 할 필요는 없지만 기존 컬렉션을 지울 수는 있습니다. 나는 그것이이 경고의 출처라고 생각합니다. 위의 샘플은 제가 대부분의 시간을 사용하고있는 접근법입니다.
확실하지만, 다음과 같은 오류 억제 할 수 없음 :
public Dictionary<string, string> Data { get; private set; }
정직하기를, 그것 때문에 스타일의 사람의 주관적 생각 (일명 StyleCop와의 FxCop)에 개발을 방해하는 바보입니다.
동의하지 않습니다. 스타일 캅과 FxCop은 훌륭합니다. FxCop의 모든 위반 사항을 수정하는 것은 바보입니다 (개발 팀이 선택한 모든 스타일 룰을 수정하는 것은 좋은 아이디어 임). 그러나 생성 된 경고를 이해하는 것은 항상 ** 좋은 생각입니다. – ken2k
나는 이것을 시도했지만 CA1811 : set에는 상류의 대중이나 보호 된 발신자가없는 것 같습니다. 오, 내가 스타일/Fx 경찰을 얼마나 좋아하는지! – DevDave
@ ken2k : 그건 ** 당신의 의견입니다. 내 것은 다르다. 컴파일러 경고는 항상 좋은 것입니다. – leppie
이것은 StyleCop이 아니라 코드 분석 (이전에 FxCop이라고 함) 경고입니다. 그리고 이것은 CA2227이 아니라 CA2227입니다.
this MSDN article을 참조하십시오.이 내용은 문제에 대해 자명합니다.
는 그것을 해결하기 위해 다음 (개인 세터)를보십시오 :
public Dictionary<string, string> Data { get; private set; }
예기치 않은 코드와 잘못된 경찰으로 유감스럽게 생각합니다! – DevDave
내가 CA2227 당신이 읽기 전용 Dictionary<,>
를 제공하도록 요청합니다 생각하지 않습니다. 오히려 StyleCop은 사전을 직접 설정할 수 있다고 불평합니다. 세터를 제거하거나 비공개로 설정하여 경고를 없애야합니다. 또한 수업은 자신의 Add
및 Clear
방법을 제공 할 수 있습니다. 자세한 내용은 http://msdn.microsoft.com/en-us/library/ms182327%28VS.80%29.aspx을 참조하십시오.
이 권장 사항/경고에서 발견 한 문제는 "수정"하는 개발자가 종종 원본 컬렉션에 대한 참조를 사용하는 대신 불필요한 복사본을 코딩하는 경우가 많다는 것입니다. 예를 들어, 나는 다음 줄이 :
myThing.Items = GetItems();
을 그리고 DEV는 그것을 해결)
var items = GetItems();
foreach (var item in items)
{
myThing.Items.Add(item);
}
(GetItems을 상상 만 항목의 컬렉션을 반환합니다. 어떻게 이것이 좋은 일이 될 수 있습니까? Microsoft는 "이 규칙에서 경고를 제외하지 마십시오"라는 문구를 발견했습니다. MSDN에서 조금 강하게!
감사합니다. 나는 그와 비슷한 것을 시도했지만, 그 당시에는 하나도 가지지 않았습니다! – DevDave