Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un tipo di enumerazione (o tipo enum) è un tipo 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 dell'enumerazione:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
Per impostazione predefinita, i valori costanti associati dei membri dell'enumerazione sono di tipo int
; iniziano con zero e aumentano di uno in base all'ordine testuale 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 tra un set di valori che si escludono a vicenda o una combinazione di scelte. Per rappresentare una combinazione di scelte, definisci un tipo di enumerazione come flag di bit.
Tipi di enumerazione come flag dei bit
Se si desidera che un tipo di enumerazione rappresenti una combinazione di scelte, definire i membri dell'enumerazione per tali scelte in modo tale che ogni singola scelta sia rappresentata come un campo di bit. Ovvero, i valori associati di tali membri dell'enumerazione devono essere potenze di due. Quindi, è possibile usare gli operatori |
logici bit per bit o &
per combinare le scelte o intersecare le combinazioni di scelte, rispettivamente. Per indicare che un tipo di enumerazione dichiara i campi di bit, applicare l'attributo Flags . 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 .
Il tipo System.Enum e il vincolo enum
Il System.Enum tipo è la classe base astratta di tutti i tipi di enumerazione. Fornisce diversi metodi per ottenere informazioni su un tipo di enumerazione e i relativi valori. Per altre informazioni ed esempi, vedere la pagina di riferimento dell'API System.Enum .
È possibile usare System.Enum
in un vincolo di classe base (noto come vincolo enum) per specificare che un parametro di tipo è un tipo di enumerazione. Qualsiasi tipo di enumerazione soddisfa anche il struct
vincolo , che viene 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 tipo integrale sottostante. Se si converte un valore di enumerazione al tipo sottostante, il risultato è il valore intero associato del membro di 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
}
}
Utilizzare il metodo Enum.IsDefined per determinare se un tipo di enumerazione contiene un membro enum con lo specifico valore associato.
Per qualsiasi tipo di enumerazione, esistono conversioni di boxing e unboxing rispettivamente verso e dal tipo System.Enum.
Specifiche del linguaggio C#
Per altre informazioni, vedere le sezioni seguenti delle specifiche del linguaggio C#:
- enumerazioni
- Valori e operazioni di enumerazione
- Operatori logici di enumerazione
- Operatori di confronto dell'enumerazione
- Conversioni esplicite di enumerazione
- Conversioni di enumerazione implicita