Partilhar via


Armazenamento de enum deve ser Int32

TypeName

EnumStorageShouldBeInt32

CheckId

CA1028

Category (Categoria)

Microsoft.Design

Quebrando alterar

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 relacionados.Por padrão, a System.Int32 tipo de dados é usado para armazenar o valor da constante. Mesmo que você pode alterar isso tipo subjacente, não é necessário ou recomendado para a maioria dos cenários.Observe que não há nenhum ganho de desempenho significativos no usando um tipo de dados menor que Int32. Se você não pode usar o tipo de dados padrão, você deve usar um dos tipos de integrais compatíveis compatível compatível com CLS, Byte, Int16, Int32, ou Int64, para certificar-se de que valores todos os da enumeração podem ser representados em linguagens de programação compatíveis compatível compatível com CLS.

Como corrigir violações

Para corrigir uma violação dessa regra, a menos que haja problemas de compatibilidade ou de dimensionar, use Int32. Para situações em que 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 problemas de compatibilidade com versões anteriores exijam.Em aplicativos, falha cumprir essa regra normalmente não causará problemas.Em bibliotecas, onde a interoperabilidade de linguagem é necessária, cumprimento dessa regra pode afetar negativamente os 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 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

Os exemplos a seguir corrige a violação anterior alterando o tipo de dados 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

Enums devem ter o valor zero

Marcar enums com FlagsAttribute

Não marque enums com FlagsAttribute

Não nomear valores de enum 'Reservado'

Não prefixo valores de enum com nome de tipo

Consulte também

Referência

System.Byte

System.Int16

System.Int32

System.Int64