Partilhar via


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

Consulte também