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
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft