Condividi tramite


CA1028: L'archivio di enum deve essere Int32

TypeName

EnumStorageShouldBeInt32

CheckId

CA1028

Category

Microsoft.Design

Breaking Change

Breaking

Causa

Il tipo sottostante di un'enumerazione pubblica non è System.Int32.

Descrizione della regola

Un'enumerazione è un tipo di valore che definisce un insieme di costanti denominate correlate.Per impostazione predefinita, il tipo di dati System.Int32 viene utilizzato per archiviare il valore costante.Anche se è possibile modificare questo tipo sottostante, non è necessario né consigliato nella maggior parte degli scenari.Si noti che l'utilizzo di un tipo di dati di dimensioni inferiori a Int32 non comporta vantaggi significativi in termini di prestazioni.Se non è possibile utilizzare il tipo di dati predefinito, è opportuno utilizzare uno dei tipi integrali conformi a Common Language System (CLS), Byte, Int16, Int32 o Int64 per assicurare che tutti i valori dell'enumerazione possano essere rappresentanti nei linguaggi di programmazione conformi a CLS.

Come correggere le violazioni

Per correggere una violazione di questa regola, a meno che non esistano problemi di dimensioni o di compatibilità, utilizzare Int32.Nelle situazioni in cui le dimensioni di Int32 non sono sufficienti per contenere i valori, utilizzare Int64.Se per compatibilità con le versioni precedenti è richiesto un tipo di dati di dimensioni inferiori, utilizzare Byte o Int16.

Esclusione di avvisi

Escludere un avviso da questa regola solo se richiesto per problemi di compatibilità con le versioni precedenti.Nelle applicazioni, la mancata conformità a questa regola non causa in genere problemi.Nelle librerie in cui è richiesta l'interoperabilità dei linguaggi, la mancata conformità a questa regola può influire negativamente sugli utenti.

Esempio di una violazione

ms182147.collapse_all(it-it,VS.110).gifDescrizione

Nell'esempio riportato di seguito vengono illustrate due enumerazioni che non utilizzano il tipo di dati sottostante consigliato.

ms182147.collapse_all(it-it,VS.110).gifCodice

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
   }
}

Esempio di correzione

ms182147.collapse_all(it-it,VS.110).gifDescrizione

Nell'esempio seguente viene corretta la violazione precedente modificando il tipo di dati sottostante in Int32.

ms182147.collapse_all(it-it,VS.110).gifCodice

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
    }
}

Regole correlate

CA1008: Gli enum devono avere valore zero

CA1027: Contrassegnare le enumerazioni con FlagsAttribute

CA2217: Non contrassegnare le enumerazioni con FlagsAttribute

CA1700: Non denominare 'Reserved' i valori di enumerazione

CA1712: Non utilizzare nomi di tipo come prefisso nei valori di enumerazione

Vedere anche

Riferimenti

System.Byte

System.Int16

System.Int32

System.Int64