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