Share via


CA2217 : Ne pas marquer les enums avec FlagsAttribute

TypeName

DoNotMarkEnumsWithFlags

CheckId

CA2217

Catégorie

Microsoft.Usage

Modification avec rupture

Modification sans rupture

Cause

Une énumération extérieurement visible est marquée par FlagsAttribute et possède une ou plusieurs valeurs qui ne sont pas des puissances de deux ou d'une combinaison des autres valeurs définies dans l'énumération.

Description de la règle

Une énumération ne doit présenter FlagsAttribute que si chaque valeur définie dans celle-ci est une puissance de deux, ou une combinaison de valeurs définies.

Comment corriger les violations

Pour corriger une violation de cette règle, supprimez FlagsAttribute de l'énumération.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

L'exemple suivant affiche une énumération de couleurs qui contient la valeur 3, qui n'est ni une puissance de deux, ni une combinaison de l'une des valeurs définies.Cette énumération ne doit pas être marquée par l'attribut 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    
    };
}

L'exemple suivant affiche une énumération de jours qui satisfait aux exigences liées au marquage par l'attribut System.FlagsAttribute.

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    
    };
}

Règles connexes

CA1027 : Marquer les enums avec FlagsAttribute

Voir aussi

Référence

System.FlagsAttribute