CA1028: O armazenamento de Enum deve ser Int32
TypeName |
EnumStorageShouldBeInt32 |
CheckId |
CA1028 |
<strong>Categoria</strong> |
Microsoft.design |
Alteração significativa |
Quebrando |
Causa
O tipo subjacente de uma enumeração pública não é System.Int32.
Descrição da regra
Uma enumeração é um tipo de valor que define um conjunto de constantes nomeadas relacionados.Por padrão, o System.Int32 tipo de dados é usado para armazenar o valor da constante.Mesmo que você pode alterar esse tipo subjacente, não é necessário ou recomendado para a maioria dos cenários.Observe que nenhum ganho de desempenho significativos é obtido por meio de um tipo de dados que seja menor que Int32.Se você não pode usar o tipo de dados padrão, você deve usar um do sistema CLS (Common Language)-compatível com tipos integrais, Byte, Int16, Int32, ou Int64 para certificar-se de que todos os valores da enumeração podem ser representados em linguagens de programação compatível com CLS.
Como corrigir violações
Para corrigir uma violação desta regra, a menos que haja problemas de compatibilidade ou de tamanho, use Int32.Para situações em que Int32 não é grande o suficiente para armazenar os valores, use Int64.Se a compatibilidade com versões anteriores requer um tipo de dados menor, use Byte ou Int16.
Quando suprimir avisos
Elimina um aviso esta regra somente se os problemas de compatibilidade com versões anteriores necessitam dele.Em aplicativos, falha em cumprir com essa regra normalmente não causa problemas.Em bibliotecas, onde a interoperabilidade de linguagem é necessária, falha em cumprir com essa regra pode afetar seus usuários.
Exemplo de uma violação
Descrição
O exemplo a seguir mostra duas enumerações que não usam o tipo de dados recomendados.
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
}
}
Exemplo de como a correção
Descrição
O exemplo a seguir corrige a violação anterior, alterando o tipo de dados para 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
}
}
Regras relacionadas
CA1008: Enums devem ter o valor zero
CA1027: Marcar enums com FlagsAttribute
CA2217: Não marque enums com FlagsAttribute
CA1700: Não nomear valores enum "Reservada"
CA1712: Não os valores de enum com nome de tipo de prefixo