Enumerazioni (F#)

Le enumerazioni, note anche come enums, sono tipi con un set definito di valori denominati. È possibile utilizzare le enumerazioni al posto dei valori letterali per semplificare la lettura e la gestione del codice.

type enum-name =
   | value1 = integer-literal1
   | value2 = integer-literal2
   ...

Note

Un'enumerazione è molto simile a un'unione discriminata con valori semplici, ad eccezione del fatto che i valori possono essere specificati. I valori sono in genere numeri interi che iniziano da 0 o 1 o numeri interi che rappresentano posizioni in bit. Il tipo sottostante dell'enumerazione è determinato dal valore letterale utilizzato, pertanto è ad esempio possibile utilizzare valori letterali con un suffisso, come 1u, 2u e così via, per un tipo di numero intero senza segno (uint32).

Quando si fa riferimento ai valori denominati, è necessario utilizzare il nome del tipo di enumerazione stesso come qualificatore, ovvero, enum-name.value1 e non solo value1. Questo comportamento è diverso rispetto a quello delle unioni discriminate. Ciò è dovuto al fatto che gli enumeratori presentano sempre l'attributo RequireQualifiedAccess.

Nel codice seguente vengono illustrati la dichiarazione e l'utilizzo di un'enumerazione.

// Declaration of an enumeration.
type Color =
   | Red = 0
   | Green = 1
   | Blue = 2
// Use of an enumeration.
let col1 : Color = Color.Red

È possibile convertire in modo semplice le enumerazioni nel tipo sottostante utilizzando l'operatore appropriato, come illustrato nel codice seguente.

// Conversion to an integral type.
let n = int col1

I tipi enumerati possono avere uno dei tipi sottostanti seguenti: sbyte, byte, int16, uint16, int32, uint32, int64, uint16, uint64 e char. I tipi di enumerazione sono rappresentati in .NET Framework come tipi ereditati da Enum, che a sua volta è ereditato da ValueType. Sono pertanto tipi di valore nello stack o inline nell'oggetto contenitore e qualsiasi valore del tipo sottostante è un valore valido dell'enumerazione. Ciò risulta particolarmente importante nel caso dei criteri di ricerca sui valori di enumerazione, in quanto è necessario fornire criterio che individui i valori senza nome.

La funzione enum nella libreria F# può essere utilizzata per generare un valore di enumerazione, anche un valore diverso da uno dei valori denominati predefiniti. Per utilizzare la funzione enum, procedere come segue.

let col2 = enum<Color>(3)

La funzione enum predefinita funziona con il tipo int32. Non può pertanto essere utilizzata con tipi di enumerazione che dispongono di altri tipi sottostanti. Utilizzare invece la funzione seguente.

type uColor =
   | Red = 0u
   | Green = 1u
   | Blue = 2u
let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)

Vedere anche

Concetti

Cast e conversioni (F#)

Altre risorse

Riferimenti per il linguaggio F#