Share via


Marcar enumeraciones con FlagsAttribute

Actualización: noviembre 2007

Nombre de tipo

MarkEnumsWithFlags

Identificador de comprobación

CA1027

Categoría

Microsoft.Design

Cambio problemático

No problemático

Motivo

Los valores de una enumeración pública son potencias de dos o combinaciones de otros valores definidos en la enumeración, pero el atributo System.FlagsAttribute no está presente. Para reducir los positivos falsos, esta regla no informa de una infracción para las enumeraciones con valores contiguos.

Descripción de la regla

Una enumeración es un tipo de valor que define un conjunto de constantes constantes con nombre relacionadas. Aplique FlagsAttribute a una enumeración cuando se pueden combinar con sentido sus constantes con nombre. Por ejemplo, tenga en cuenta una enumeración de los días de la semana en una aplicación que realiza el seguimiento de qué recursos de los días disponibles. Si la disponibilidad de cada recurso se codifica utilizando la enumeración con FlagsAttribute presente, se puede representar cualquier combinación de días. Sin el atributo, sólo se puede representar uno día de la semana.

Para campos que almacenan las enumeraciones combinables, los valores de enumeración individuales se tratan como grupos de bits dentro del campo. Por consiguiente, a veces se les denomina campos de bits. Para combinar los valores de enumeración para el almacenamiento en un campo de bits, utilice los operadores condicionales de tipo Boolean. Para probar un campo de bits para determinar si un valor de enumeración concreto está presente, utilice los operadores lógicos de tipo Boolean. Para almacenar un campo de bits y recuperar correctamente los valores de enumeración combinados, cada valor definido en la enumeración debe ser una potencia de dos. A menos que esto sea así, los operadores lógicos de tipo Boolean no podrán extraer los valores de enumeración individuales almacenados en el campo.

Cómo corregir infracciones

Para corregir una infracción de esta regla, agregue FlagsAttribute a la enumeración.

Cuándo suprimir advertencias

Suprima una advertencia de esta regla si no desea que los valores de enumeración sean combinables.

Ejemplo

En el ejemplo siguiente, DaysEnumNeedsFlags es una enumeración que cumple los requisitos para utilizar FlagsAttribute, pero no lo tiene. La enumeración ColorEnumShouldNotHaveFlag no tiene valores que sean potencias de dos, y especifica FlagsAttribute incorrectamente. Esto infringe la regla No marcar enumeraciones como 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
   }
}

Reglas relacionadas

No marcar enumeraciones como FlagsAttribute

Vea también

Referencia

System.FlagsAttribute