Condividi tramite


L'archivio di enum deve essere Int32

Aggiornamento: novembre 2007

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

Negli esempi seguenti 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

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