Compartilhar via


CA1028: o armazenamento de enum deve ser Int32

TypeName

EnumStorageShouldBeInt32

CheckId

CA1028

Categoria

Microsoft.Design

Alteração Significativa

Quebra

Causa

O tipo subjacente de uma enumeração pública não é Int32.

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 de Int32 é usada para armazenar o valor constante.Embora você possa alterar esse tipo subjacente, não é necessário ou recomendado para a maioria dos cenários.Observe que nenhum ganho de desempenho significante é obtido usando um tipo de dados que seja menor do que Int32.Se você não pode usar o tipo de dados padrão, você deve usar um do sistema de linguagem comum (CLS) - integrais tipos compatíveis, Byte, Int16, Int32, ou Int64 para garantir que todos os valores de enumeração podem 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 os problemas de tamanho ou de compatibilidade existirem, use Int32.Em situações em que Int32 não é grande o suficiente para manter os valores, use Int64.Se a compatibilidade com versões anteriores requer um tipo de dados menor, use Byte ou Int16.

Quando Suprimir Alertas

Suprima um aviso desta regra apenas se os problemas de compatibilidade com versões anteriores a exige.Em aplicativos, a falha e com esta regra geral não causa problemas.Em bibliotecas, onde a interoperabilidade de idioma é necessária, a falha e com esta 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 subjacente recomendado.

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 Corrigir

Descrição

O exemplo a seguir corrige a violação anterior alterando o tipo de dados subjacente a 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: os enums devem ter valor zero

CA1027: marcar enums com FlagsAttribute

CA2217: não marcar enums com FlagsAttribute

CA1700: não nomeie valores de enum como 'Reservados'

CA1712: não use valores enum como prefixo com o nome do tipo

Consulte também

Referência

Byte

Int16

Int32

Int64