We recommend using Visual Studio 2017

CA2217: Do not mark enums with FlagsAttribute

 

The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at CA2217: Do not mark enums with FlagsAttribute.

TypeName|DoNotMarkEnumsWithFlags|
|CheckId|CA2217|
|Category|Microsoft.Usage|
|Breaking Change|Non Breaking|

An externally visible enumeration is marked with FlagsAttribute and it has one or more values that are not powers of two or a combination of the other defined values on the enumeration.

An enumeration should have FlagsAttribute present only if each value defined in the enumeration is a power of two, or a combination of defined values.

To fix a violation of this rule, remove FlagsAttribute from the enumeration.

Do not suppress a warning from this rule.

The following example shows an enumeration, Color, that contains the value 3, which is neither a power of two, nor a combination of any of the defined values. The Color enumeration should not be marked with the FlagsAttribute.

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

The following example shows an enumeration, Days, that meets the requirements for being marked with the System.FlagsAttribute.

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: Mark enums with FlagsAttribute

System.FlagsAttribute

Show: