Condividi tramite


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 compatibili con CLS, Byte, Int16, Int32 o Int64 per assicurare che tutti i valori dell'enumerazione possano essere rappresentanti nei linguaggi di programmazione compatibili con CLS.

Correzione di violazioni

Per correggere una violazione di questa regola, a meno che non siano presenti 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

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

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

Regole correlate

Gli enum devono avere valore zero

Sostituire gli enum con FlagsAttribute

Non contrassegnare le enumerazioni con FlagsAttribute

Non denominare 'Reserved' i valori di enumerazione

Non utilizzare nomi di tipo come prefisso nei valori di enumerazione

Vedere anche

Riferimenti

System.Byte
System.Int16
System.Int32
System.Int64