Compartir a través de


El almacenamiento de enumeraciones debe ser Int32

Actualización: noviembre 2007

Nombre de tipo

EnumStorageShouldBeInt32

Identificador de comprobación

CA1028

Categoría

Microsoft.Design

Cambio problemático

Motivo

El tipo subyacente de una enumeración pública no es System.Int32.

Descripción de la regla

Una enumeración es un tipo de valor que define un conjunto de constantes con nombre relacionadas. De manera predeterminada, el tipo de datos System.Int32 se utiliza para almacenar el valor constante. Aunque puede cambiar este tipo subyacente, no es necesario o ni se recomienda en la mayoría de los escenarios. Observe que no se obtiene una mejora de rendimiento significativa al utilizar un tipo de datos menor que Int32. Si no puede utilizar el tipo de datos predeterminado, debe utilizar tipos integrales conformes a CLS, Byte, Int16, Int32 o Int64, para garantizar que todos los valores de la enumeración se puedan representar en los lenguajes de programación compatibles con CLS.

Cómo corregir infracciones

Para corregir una infracción de esta regla, a menos que haya problemas de compatibilidad o de tamaño, utilice Int32. Para situaciones donde Int32 no es bastante grande para contener los valores, utilice Int64. Si la compatibilidad con versiones anteriores requiere un tipo de datos menor, utilice Byte o Int16.

Cuándo suprimir advertencias

Suprima una advertencia de esta regla únicamente si los problemas de compatibilidad con versiones anteriores lo requieren. En las aplicaciones, no cumplir esta regla normalmente no produce problemas. En bibliotecas, donde se requiere la interoperabilidad de lenguajes, no cumplir esta regla podría afectar de forma adversa a sus usuarios.

Ejemplo de infracción

Descripción

El ejemplo siguiente muestra dos enumeraciones que no utilizan el tipo de datos subyacente recomendado.

Código

Imports System

Namespace Samples

    <Flags()> _
    Public Enum Days As UInteger
        None = 0
        Monday = 1
        Tuesday = 2
        Wednesday = 4
        Thursday = 8
        Friday = 16
        All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
    End Enum

    Public Enum Color As SByte
        None = 0
        Red = 1
        Orange = 3
        Yellow = 4
    End Enum

End Namespace
using System;

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

   public enum Color :sbyte
   {
      None        = 0,
      Red         = 1,
      Orange      = 3,
      Yellow      = 4
   }
}

Ejemplo de cómo corregir

Descripción

En los ejemplos siguientes se corrige la infracción anterior cambiando el tipo de datos subyacentes a Int32.

Código

Imports System

Namespace Samples

    <Flags()> _
    Public Enum Days As Integer
        None = 0
        Monday = 1
        Tuesday = 2
        Wednesday = 4
        Thursday = 8
        Friday = 16
        All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
    End Enum

    Public Enum Color As Integer
        None = 0
        Red = 1
        Orange = 3
        Yellow = 4
    End Enum

End Namespace
using System;

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

    public enum Color : int
    {
        None        = 0,
        Red         = 1,
        Orange      = 3,
        Yellow      = 4
    }
}

Reglas relacionadas

Las enumeraciones deben tener un valor igual a cero

Marcar enumeraciones con FlagsAttribute

No marcar enumeraciones como FlagsAttribute

No nombrar valores de enumeración como 'Reserved'

No utilizar prefijos en valores de enumeración con el nombre de tipo

Vea también

Referencia

System.Byte

System.Int16

System.Int32

System.Int64