CA1027 : Marquer les enums avec FlagsAttributeCA1027: Mark enums with FlagsAttribute

TypeNameTypeName MarkEnumsWithFlagsMarkEnumsWithFlags
CheckIdCheckId CA1027CA1027
CategoryCategory Microsoft.DesignMicrosoft.Design
Modification avec ruptureBreaking Change Sans ruptureNon-breaking

CauseCause

Les valeurs d’une énumération publique sont des puissances de deux ou des combinaisons d’autres valeurs sont définies dans l’énumération, et le System.FlagsAttribute attribut n’est pas présent.The values of a public enumeration are powers of two or are combinations of other values that are defined in the enumeration, and the System.FlagsAttribute attribute is not present. Pour réduire les faux positifs, cette règle ne signale pas d’une violation pour les énumérations qui ont des valeurs contiguës.To reduce false positives, this rule does not report a violation for enumerations that have contiguous values.

Description de la règleRule description

Une énumération est un type valeur qui définit un jeu de constantes nommées associées.An enumeration is a value type that defines a set of related named constants. Appliquer FlagsAttribute à une énumération lorsque ses constantes nommées peuvent être combinées.Apply FlagsAttribute to an enumeration when its named constants can be meaningfully combined. Par exemple, considérez une énumération des jours de la semaine dans une application qui effectue le suivi des ressources de chaque jour sont disponibles.For example, consider an enumeration of the days of the week in an application that keeps track of which day's resources are available. Si la disponibilité de chaque ressource est encodée à l’aide de l’énumération a FlagsAttribute présent, n’importe quelle combinaison de jours peut être représentée.If the availability of each resource is encoded by using the enumeration that has FlagsAttribute present, any combination of days can be represented. Sans l’attribut, un seul jour de la semaine peut être représenté.Without the attribute, only one day of the week can be represented.

Pour les champs qui stockent des énumérations combinables, les valeurs d’énumération individuelles sont traitées comme des groupes de bits dans le champ.For fields that store combinable enumerations, the individual enumeration values are treated as groups of bits in the field. Par conséquent, ces champs sont parfois appelés des champs de bits.Therefore, such fields are sometimes referred to as bit fields. Pour combiner des valeurs d’énumération pour le stockage dans un champ de bits, utilisez les opérateurs booléens conditionnels.To combine enumeration values for storage in a bit field, use the Boolean conditional operators. Pour tester un champ de bits pour déterminer si une valeur d’énumération spécifique est présente, utilisez les opérateurs logiques booléens.To test a bit field to determine whether a specific enumeration value is present, use the Boolean logical operators. Pour un champ de bits stocker et récupérer correctement les valeurs d’énumération combinées, chaque valeur est définie dans l’énumération doit être une puissance de deux.For a bit field to store and retrieve combined enumeration values correctly, each value that is defined in the enumeration must be a power of two. Sauf si cela est le cas, les opérateurs logiques booléens ne sera pas en mesure d’extraire les valeurs d’énumération individuelles qui sont stockés dans le champ.Unless this is so, the Boolean logical operators will not be able to extract the individual enumeration values that are stored in the field.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, ajoutez FlagsAttribute à l’énumération.To fix a violation of this rule, add FlagsAttribute to the enumeration.

Quand supprimer les avertissementsWhen to suppress warnings

Supprimez un avertissement de cette règle si vous ne souhaitez pas que les valeurs d’énumération soient combinables.Suppress a warning from this rule if you do not want the enumeration values to be combinable.

ExempleExample

Dans l’exemple suivant, DaysEnumNeedsFlags est une énumération qui satisfait les conditions d’utilisation FlagsAttribute, mais ne l’a ne pas.In the following example, DaysEnumNeedsFlags is an enumeration that meets the requirements for using FlagsAttribute, but does not have it. Le ColorEnumShouldNotHaveFlag énumération n’a pas de valeurs qui sont des puissances de deux, mais spécifie incorrectement FlagsAttribute.The ColorEnumShouldNotHaveFlag enumeration does not have values that are powers of two, but incorrectly specifies FlagsAttribute. Cela viole la règle CA2217 : ne marquez pas les enums avec FlagsAttribute.This violates rule CA2217: Do not mark enums with FlagsAttribute.

using System;

namespace DesignLibrary
{
// Violates rule: MarkEnumsWithFlags.

   public enum DaysEnumNeedsFlags 
   {
      None        = 0,
      Monday      = 1,
      Tuesday     = 2,
      Wednesday   = 4,
      Thursday    = 8,
      Friday      = 16,
      All         = Monday| Tuesday | Wednesday | Thursday | Friday
   }
   // Violates rule: DoNotMarkEnumsWithFlags.
   [FlagsAttribute]
   public enum ColorEnumShouldNotHaveFlag 
   {
      None        = 0,
      Red         = 1,
      Orange      = 3,
      Yellow      = 4
   }
}

CA2217 : Ne marquez pas les énumérations avec FlagsAttributeCA2217: Do not mark enums with FlagsAttribute

Voir aussiSee also

System.FlagsAttribute