Tipi di enumerazione (riferimenti per C#)

Un tipo di enumerazione (o tipo enumerazione) è un tipo di valore definito da un set di costanti denominate del tipo numerico integrale sottostante. Per definire un tipo di enumerazione, usare la enum parola chiave e specificare i nomi dei membri enumerazione:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

Per impostazione predefinita, i valori costanti associati dei membri enumerazione sono di tipo int; iniziano con zero e aumentano di uno seguendo l'ordine di testo della definizione. È possibile specificare in modo esplicito qualsiasi altro tipo numerico integrale come tipo sottostante di un tipo di enumerazione. È anche possibile specificare in modo esplicito i valori costanti associati, come illustrato nell'esempio seguente:

enum ErrorCode : ushort
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}

Non è possibile definire un metodo all'interno della definizione di un tipo di enumerazione. Per aggiungere funzionalità a un tipo di enumerazione, creare un metodo di estensione.

Il valore predefinito di un tipo E di enumerazione è il valore prodotto dall'espressione (E)0, anche se zero non ha il membro enumerazione corrispondente.

Si usa un tipo di enumerazione per rappresentare una scelta da un set di valori reciprocamente esclusivi o da una combinazione di scelte. Per rappresentare una combinazione di scelte, definire un tipo di enumerazione come flag di bit.

Tipi di enumerazione come flag di bit

Se si vuole che un tipo di enumerazione rappresenti una combinazione di scelte, definire i membri enumerazione per tali scelte in modo che una singola scelta sia un campo bit. Vale a dire, i valori associati di tali membri enumerazione devono essere i poteri di due. È quindi possibile usare gli operatori | logici bit per bit o & per combinare le scelte o le combinazioni di scelte rispettivamente. Per indicare che un tipo di enumerazione dichiara i campi bit, applicare l'attributo Flags a esso. Come illustrato nell'esempio seguente, è anche possibile includere alcune combinazioni tipiche nella definizione di un tipo di enumerazione.

[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

public class FlagsEnumExample
{
    public static void Main()
    {
        Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
        Console.WriteLine(meetingDays);
        // Output:
        // Monday, Wednesday, Friday

        Days workingFromHomeDays = Days.Thursday | Days.Friday;
        Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
        // Output:
        // Join a meeting by phone on Friday

        bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
        Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
        // Output:
        // Is there a meeting on Tuesday: False

        var a = (Days)37;
        Console.WriteLine(a);
        // Output:
        // Monday, Wednesday, Saturday
    }
}

Per altre informazioni ed esempi, vedere la pagina di riferimento dell'API System.FlagsAttribute e i membri non esclusivi e la sezione Attributi Flags della pagina di riferimento dell'API System.Enum .

Tipo enumerazione System.Enum

Il System.Enum tipo è la classe base astratta di tutti i tipi di enumerazione. Fornisce un numero di metodi per ottenere informazioni su un tipo di enumerazione e sui relativi valori. Per altre informazioni ed esempi, vedere la pagina di riferimento per le System.Enum API.

È possibile usare System.Enum in un vincolo di classe di base , noto come vincolo enumerazione, per specificare che un parametro di tipo è un tipo di enumerazione. Qualsiasi tipo di enumerazione soddisfa anche il struct vincolo, usato per specificare che un parametro di tipo è un tipo di valore non nullable.

Conversioni

Per qualsiasi tipo di enumerazione, esistono conversioni esplicite tra il tipo di enumerazione e il relativo tipo integrale sottostante. Se si esegue il cast di un valore enumerazione al tipo sottostante, il risultato è il valore integrale associato di un membro enumerazione.

public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

public class EnumConversionExample
{
    public static void Main()
    {
        Season a = Season.Autumn;
        Console.WriteLine($"Integral value of {a} is {(int)a}");  // output: Integral value of Autumn is 2

        var b = (Season)1;
        Console.WriteLine(b);  // output: Summer

        var c = (Season)4;
        Console.WriteLine(c);  // output: 4
    }
}

Usare il Enum.IsDefined metodo per determinare se un tipo di enumerazione contiene un membro enumerazione con il determinato valore associato.

Per qualsiasi tipo di enumerazione, esistono rispettivamente conversioni boxing e unboxing da e verso il System.Enum tipo.

Specifiche del linguaggio C#

Per altre informazioni, vedere le sezioni seguenti delle specifiche del linguaggio C#:

Vedi anche