다음을 통해 공유


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

TypeName

DoNotMarkEnumsWithFlags

CheckId

CA2217

범주

Microsoft.Usage

변경 수준

주요 변경 아님

원인

외부에서 볼 수 있는 열거형이 FlagsAttribute로 표시되어 있고, 2의 거듭제곱 또는 열거형에 정의된 다른 값의 조합이 아닌 값이 하나 이상 들어 있습니다.

규칙 설명

열거형에는 열거형에 정의된 각 값이 2의 거듭제곱이거나 정의된 값의 조합인 경우에만 FlagsAttribute가 존재할 수 있습니다.

위반 문제를 해결하는 방법

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

경고를 표시하지 않는 경우

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

예제

다음 예제에서는 값 3이 들어 있는 Color라는 열거형을 보여 줍니다. 이 값은 2의 거듭제곱이 아니며 정의되어 있는 값의 조합이 아닙니다. 따라서 Color 열거형은 FlagsAttribute로 표시하지 말아야 합니다.

Imports System

Namespace Samples

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

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

    End Enum
End Namespace
using System;

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

using namespace System;

namespace Samples 
{
    // Violates this rule    
    [FlagsAttribute]    
    public enum class Color    
    {        
        None   = 0,        
        Red    = 1,        
        Orange = 3,        
        Yellow = 4    
    };
}

다음 예제에서는 System.FlagsAttribute로 표시하기 위한 요구 사항에 맞는 Days라는 열거형을 보여 줍니다.

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

using System;

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

using namespace System;

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

관련 규칙

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

참고 항목

참조

System.FlagsAttribute