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
Descrizione
Nell'esempio riportato di seguito vengono illustrate due enumerazioni che non utilizzano il tipo di dati sottostante consigliato.
Codice
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
Descrizione
Nell'esempio seguente viene corretta la violazione precedente modificando il tipo di dati sottostante in Int32.
Codice
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