Compartir a través de


CA1028: El almacenamiento de la enumeración debe ser de tipo Int32

TypeName

EnumStorageShouldBeInt32

Identificador de comprobación

CA1028

Categoría

Microsoft.Design

Cambio problemático

Problemático

Motivo

El tipo subyacente de una enumeración pública no es 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 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 utilizando un tipo de datos que es menor que Int32.Si no puede utilizar el tipo de datos predeterminado, debe utilizar uno de los tipos enteros conformes a Common Language Runtime (CLR), Byte, Int16, Int32 o Int64 para garantizar que todos los valores de la enumeración se puedan representar en los lenguajes de programación conformes a CLS.

Cómo corregir infracciones

Para corregir una infracción de esta regla, a menos que existan 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 el ejemplo siguiente 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

CA1008: Las enumeraciones deben tener un valor igual a cero

CA1027: Marcar enumeraciones con FlagsAttribute

CA2217: No marcar enumeraciones con FlagsAttribute

CA1700: No nombrar valores de enumeración como 'Reserved'

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

Vea también

Referencia

Byte

Int16

Int32

Int64