Share via


CA1069: 열거형에는 중복 값이 없어야 합니다.

속성
규칙 ID CA1069
타이틀 열거형에 중복 값이 없어야 합니다.
범주 디자인
수정 사항이 주요 변경인지 여부 주요 변경
.NET 8에서 기본적으로 사용 제안 사항

원인

열거형에는 동일한 상수 값을 명시적으로 할당받은 여러 멤버가 있습니다.

규칙 설명

모든 열거형 멤버는 고유한 상수 값을 포함하거나 열거형의 이전 멤버를 사용하여 명시적으로 할당받아 값을 공유하는 명시적 의도를 나타내야 합니다. 예시:

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
}

경고를 표시하지 않는 경우

이 규칙의 위반을 표시하지 않습니다.

참고 항목