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 |
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 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