CA1028: O armazenamento de enum deve ser Int32
Propriedade | valor |
---|---|
ID da regra | CA1028 |
Cargo | O armazenamento de enum deve ser Int32 |
Categoria | Desenho |
A correção está quebrando ou não quebrando | Quebrando |
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 examina apenas 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 é usado para armazenar o System.Int32 valor constante. Embora você possa alterar esse tipo subjacente, ele não é necessário ou recomendado para a maioria dos cenários. Nenhum ganho de desempenho significativo é obtido usando um tipo de dados menor que Int32. Se não for possível usar o tipo de dados padrão, use um dos tipos integrais compatíveis com CLS (Common Language System), Byte, Int16, Int32ou Int64 para garantir que todos os valores da enumeração possam ser representados em linguagens de programação compatíveis com CLS.
Como corrigir violações
Para corrigir uma violação desta regra, a menos que existam problemas de tamanho ou compatibilidade, use Int32. Para situações Int32 em que 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
Suprima um aviso desta regra somente se problemas de compatibilidade com versões anteriores o exigirem. Nos aplicativos, o não cumprimento dessa regra geralmente não causa problemas. Nas bibliotecas, onde a interoperabilidade linguística é necessária, o não cumprimento desta regra pode afetar negativamente os utilizadores.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1028.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Configurar código para análise
Use a opção a seguir para configurar em quais partes da sua base de código executar essa regra.
Você pode configurar essa opção apenas para esta regra, para todas as regras às quais ela se aplica ou para todas as regras nesta categoria (Design) às quais ela se aplica. Para obter mais informações, consulte Opções de configuração da regra de qualidade de código.
Incluir superfícies de API específicas
Você pode configurar em quais partes da sua base de código executar essa regra, com base em sua acessibilidade. Por exemplo, para especificar que a regra deve ser executada somente na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig em seu 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 conexas
- CA1008: Enums deve ter valor zero
- CA1027: Marcar enums com FlagsAttribute
- CA2217: Não marcar enums com FlagsAttribute
- CA1700: Não nomeie valores de enum 'Reservado'
- CA1712: Não prefixar valores de enum com nome de tipo