다음을 통해 공유


CA2217: 열거형을 FlagsAttribute로 표시하지 마십시오.

속성
규칙 ID CA2217
타이틀 열거형을 FlagsAttribute로 표시하지 마세요.
범주 사용 현황
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 아니요

원인

열거형이 FlagsAttribute로 표시되고 2의 거듭제곱 또는 열거형에 정의된 다른 값의 조합이 아닌 값을 하나 이상 갖습니다.

기본적으로 이 규칙은 외부에 표시되는 열거형만 확인하지만 이는 구성 가능합니다.

규칙 설명

열거형에 정의된 각 값이 2의 거듭제곱 또는 정의된 값의 조합인 경우에만 열거형에 FlagsAttribute가 있어야 합니다.

위반 문제를 해결하는 방법

이 규칙의 위반을 해결하려면 열거형에서 FlagsAttribute를 제거합니다.

경고를 표시하지 않는 경우

이 규칙에서는 경고를 표시해야 합니다.

분석할 코드 구성

다음 옵션을 사용하여 이 규칙이 실행될 코드베이스 부분을 구성합니다.

이 규칙, 적용되는 모든 규칙 또는 적용되는 이 범주의 모든 규칙(사용)에 대해 이 옵션을 구성할 수 있습니다. 자세한 내용은 코드 품질 규칙 구성 옵션을 참조하세요.

특정 API 화면 포함

접근성을 기반으로 이 규칙을 실행할 코드베이스의 파트를 구성할 수 있습니다. 예를 들어 규칙이 퍼블릭이 아닌 API 표면에서만 실행되도록 지정하려면 프로젝트의 .editorconfig 파일에 다음 키-값 쌍을 추가합니다.

dotnet_code_quality.CAXXXX.api_surface = private, internal

예제

다음 코드에서는 값 3을 포함하는 Color 열거형을 보여 줍니다. 3은 2의 거듭제곱 또는 정의된 값의 조합이 아닙니다. Color 열거형은 FlagsAttribute로 표시되어서는 안 됩니다.

// Violates this rule    
[FlagsAttribute]
public enum Color
{
    None = 0,
    Red = 1,
    Orange = 3,
    Yellow = 4
}
Imports System

Namespace Samples

    ' Violates this rule    
    <FlagsAttribute()> _
    Public Enum Color

        None = 0
        Red = 1
        Orange = 3
        Yellow = 4

    End Enum
End Namespace

다음 코드에서는 FlagsAttribute로 표시되는 요구 사항을 충족하는 Days 열거형을 보여 줍니다.

[FlagsAttribute]
public enum Days
{
    None = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 4,
    Thursday = 8,
    Friday = 16,
    All = Monday | Tuesday | Wednesday | Thursday | Friday
}
Imports System
Namespace Samples

    <FlagsAttribute()> _
    Public Enum Days

        None = 0
        Monday = 1
        Tuesday = 2
        Wednesday = 4
        Thursday = 8
        Friday = 16
        All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday

    End Enum
End Namespace

CA1027: 열거형을 FlagsAttribute로 표시하십시오.

참고 항목