CA1069: 열거형에는 중복 값이 없어야 합니다.
속성 | 값 |
---|---|
규칙 ID | CA1069 |
제목 | 열거형에 중복 값이 없어야 합니다. |
범주 | 디자인 |
수정 사항이 주요 변경인지 여부 | 주요 변경 |
.NET 9에서 기본적으로 사용 | 제안 사항 |
원인
열거형에는 동일한 상수 값을 명시적으로 할당받은 여러 멤버가 있습니다.
규칙 설명
모든 열거형 멤버는 고유한 상수 값을 포함하거나 열거형의 이전 멤버를 사용하여 명시적으로 할당받아 값을 공유하는 명시적 의도를 나타내야 합니다. 예시:
enum E
{
Field1 = 1,
AnotherNameForField1 = Field1, // This is fine
Field2 = 2,
Field3 = 2, // CA1069: This is not fine. Either assign a different constant value or 'Field2' to indicate explicit intent of sharing value.
}
이 규칙은 다음 시나리오에서 도입된 기능 버그를 catch하는 데 도움이 됩니다.
- 입력 실수: 사용자가 실수로 여러 멤버에 대해 동일한 상수 값을 입력했습니다.
- 복사 및 붙여넣기 실수: 사용자가 기존 멤버 정의를 복사한 다음 멤버의 이름을 바꾸었으나 값을 변경하지 않았습니다.
- 여러 분기에서 해상도 병합: 새 멤버가 다른 이름으로 추가되었지만 다른 분기에서는 동일한 값을 사용하여 추가되었습니다.
위반 문제를 해결하는 방법
위반 문제를 해결하려면 새 고유 상수 값을 할당하거나 열거형에 이전 멤버를 할당하여 동일한 값을 공유하는 명시적 의도를 표시합니다. 예를 들어 다음 코드 조각은 규칙 위반 및 위반을 해결하는 몇 가지 방법을 보여 줍니다.
enum E
{
Field1 = 1,
AnotherNameForField1 = Field1, // This is fine
Field2 = 2,
Field3 = 2, // CA1069: This is not fine. Either assign a different constant value or 'Field2' to indicate explicit intent of sharing value.
}
enum E
{
Field1 = 1,
AnotherNameForField1 = Field1, // This is fine
Field2 = 2,
Field3 = 3, // This is now fine
}
enum E
{
Field1 = 1,
AnotherNameForField1 = Field1, // This is fine
Field2 = 2,
Field3 = Field2, // This is also fine
}
경고를 표시하지 않는 경우
이 규칙의 위반을 표시하지 않습니다.
참고 항목
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET