Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona
Il presente articolo è stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Enumerazioni (F#)

Enumerazioni, note anche come enumerazioni, sono tipi integrali in cui le etichette vengono assegnate a un sottoinsieme dei valori. È 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
   ...

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. Se un'enumerazione è utilizzata per rappresentare le posizioni di bit, è inoltre necessario utilizzare l'attributo di FlagsAttribute .

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)


Aggiunte alla community

AGGIUNGI
Mostra:
© 2015 Microsoft