CA1028: O armazenamento de enumerações deve ser Int32
Property | Valor |
---|---|
ID da regra | CA1028 |
Título | O armazenamento de enumerações deve ser Int32 |
Categoria | Projetar |
Correção interruptiva ou sem interrupção | Quebra |
Habilitado por padrão no .NET 8 | Não |
Causa
O tipo subjacente de uma enumeração não é System.Int32.
Por padrão, essa regra apenas analisa as enumerações visíveis externamente, mas isso é configurável.
Descrição da regra
Uma enumeração é um tipo de valor que define um conjunto de constantes nomeadas relacionadas. Por padrão, o tipo de dados System.Int32 é usado para armazenar o valor constante. Mesmo que seja possível alterar esse tipo subjacente, isso não é necessário ou recomendado na maioria dos cenários. Nenhum ganho de desempenho significativo é obtido usando um tipo de dados menor que Int32. Se você não puder usar o tipo de dados padrão, use um dos tipos integrais compatíveis com CLS (Common Language Specification): 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íveis com CLS.
Como corrigir violações
Para corrigir uma violação dessa regra, a menos que existam problemas de tamanho ou compatibilidade, use Int32. Para situações em que Int32 não é grande o suficiente para manter os valores, use Int64. Se a compatibilidade com versões anteriores exigir um tipo de dados menor, use Byte ou Int16.
Quando suprimir avisos
Suprime um aviso dessa regra somente se problemas de compatibilidade com versões anteriores assim exigirem. Em aplicativos, a não conformidade com essa regra geralmente não causa problemas. Em bibliotecas, onde a interoperabilidade de idioma é necessária, a não conformidade com essa regra pode afetar negativamente os usuários.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA1028
// The code that's violating the rule is on this line.
#pragma warning restore CA1028
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1028.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Configurar código para analisar
Use a opção a seguir para configurar em quais partes da base de código essa regra deve ser executada.
Você pode configurar essa opção apenas para essa regra, para todas as regras às quais ela se aplica ou para todas as regras nessa categoria (Design) às quais ela se aplica. Para saber mais, confira Opções de configuração de regra de qualidade de código.
Incluir superfícies de API específicas
É possível configurar em quais partes da base de código essa regra deverá ser executada, com base na acessibilidade. Por exemplo, para especificar que a regra deverá ser executada apenas na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig no projeto:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Exemplo
O exemplo a seguir mostra duas enumerações que não usam o tipo de dados subjacente recomendado.
[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
}
<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
O exemplo a seguir corrige a violação anterior alterando o tipo de dados subjacente para Int32.
[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
}
<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
Regras relacionadas
- CA1008: Enumerações devem ter valor zero
- CA1027: Marcar enumerações com FlagsAttribute
- CA2217: Não marcar enumerações com FlagsAttribute
- CA1700: Não nomear valores de enumeração 'Reserved'
- CA1712: Não prefixar valores de enumeração com um nome de tipo