CA1028: El almacenamiento de la enumeración debe ser de tipo Int32
Nombre de tipo |
EnumStorageShouldBeInt32 |
Identificador de comprobación |
CA1028 |
Categoría |
Microsoft.Design |
Cambio problemático |
Sí |
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 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