Partilhar via


CA1028: 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 relacionadas. Por padrão, o System.Int32 o tipo de dados é usado para armazenar o valor da constante. Embora, por exemplo, 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 é menor do que Int32. Se você não pode usar o tipo de dados padrão, você deve usar um de sistema de linguagem comum (CLS)-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 onde 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, cumprimento dessa regra geralmente 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 de base recomendada.

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 subjacente 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 os valores de enum 'Reservado'

CA1712: Não os valores de enum com nome de tipo de prefixo

Consulte também

Referência

System.Byte

System.Int16

System.Int32

System.Int64