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.
Breve descrizione
L'istruzione enum viene utilizzata per dichiarare un'enumerazione. Un'enumerazione è un tipo distinto costituito da un set di etichette denominate denominato elenco enumeratore.
Descrizione lunga
L'istruzione enum consente di creare un set di etichette fortemente tipizzato. Tale enumerazione può essere utilizzata nel codice senza dover analizzare o verificare la presenza di errori di ortografia.
Le enumerazioni sono rappresentate internamente come numeri interi con un valore iniziale pari a zero. Alla prima etichetta dell'elenco viene assegnato il valore zero. Alle etichette rimanenti vengono assegnati numeri progressivi.
Nella definizione, alle etichette può essere assegnato qualsiasi valore intero. Le etichette senza valore assegnato accettano il valore intero successivo.
Sintassi (di base)
enum <enum-name> {
<label> [= <int-value>]
...
}
Esempio di utilizzo
Nell'esempio seguente viene illustrata un'enumerazione di oggetti che possono essere visualizzati come file multimediali. La definizione assegna valori espliciti ai valori sottostanti di music, picture, video. Le etichette immediatamente successive a un'assegnazione esplicita ottengono il valore intero successivo. I sinonimi possono essere creati assegnando lo stesso valore a un'altra etichetta; Vedere i valori costruiti per: ogg, oga, mogg, o jpg, jpego , mpg.mpeg
enum MediaTypes {
unknown
music = 10
mp3
aac
ogg = 15
oga = 15
mogg = 15
picture = 20
jpg
jpeg = 21
png
video = 40
mpg
mpeg = 41
avi
m4v
}
Il metodo GetEnumNames() restituisce l'elenco delle etichette per l'enumerazione .
[MediaTypes].GetEnumNames()
unknown
music
mp3
aac
ogg
oga
mogg
picture
jpg
jpeg
png
video
mpg
mpeg
avi
m4v
Il metodo GetEnumValues() restituisce l'elenco dei valori per l'enumerazione .
[MediaTypes].GetEnumValues()
unknown
music
mp3
aac
oga
oga
oga
picture
jpeg
jpeg
png
video
mpeg
mpeg
avi
m4v
Annotazioni
GetEnumNames() e GetEnumValues() sembrano restituire gli stessi risultati; elenco di valori denominati. Tuttavia, internamente, GetEnumValues() enumera i valori, quindi esegue il mapping dei valori in nomi. Leggere attentamente l'elenco e si noterà che ogg, ogae mogg vengono visualizzati nell'output di GetEnumNames(), ma l'output di GetEnumValues() mostra solo oga. La stessa cosa accade per jpg, jpege mpg, mpeg.
Il GetEnumName() metodo può essere utilizzato per ottenere un nome associato a un valore specifico. Se a un valore sono associati più nomi, il metodo restituisce il nome in ordine alfabetico.
[MediaTypes].GetEnumName(15)
oga
Nell'esempio seguente viene illustrato come eseguire il mapping di ogni nome al relativo valore.
[MediaTypes].GetEnumNames() | ForEach-Object {
"{0,-10} {1}" -f $_,[int]([MediaTypes]::$_)
}
unknown 0
music 10
mp3 11
aac 12
ogg 15
oga 15
mogg 15
picture 20
jpg 21
jpeg 21
png 22
video 40
mpg 41
mpeg 41
avi 42
m4v 43
Enumerazioni come flag
Le enumerazioni possono essere definite come una raccolta di flag di bit. Dove, in un dato momento, l'enumerazione rappresenta uno o più di tali flag attivati.
Affinché le enumerazioni come flag funzionino correttamente, ogni etichetta deve avere una potenza di due valori.
Sintassi (flag)
[Flags()] enum <enum-name> {
<label 0> [= 1]
<label 1> [= 2]
<label 2> [= 4]
<label 3> [= 8]
...
}
Esempio di utilizzo delle bandiere
Nell'esempio seguente viene creata l'enumerazione FileAttributes .
[Flags()] enum FileAttributes {
Archive = 1
Compressed = 2
Device = 4
Directory = 8
Encrypted = 16
Hidden = 32
}
[FileAttributes]$file1 = [FileAttributes]::Archive
[FileAttributes]$file1 +=[FileAttributes]::Compressed
[FileAttributes]$file1 += [FileAttributes]::Device
"file1 attributes are: $file1"
[FileAttributes]$file2 = [FileAttributes]28 ## => 16 + 8 + 4
"file2 attributes are: $file2"
file1 attributes are: Archive, Compressed, Device
file2 attributes are: Device, Directory, Encrypted
Per verificare che sia impostata una specifica, è possibile utilizzare l'operatore -banddi confronto binario . In questo esempio, viene verificato l'attributo Device e Archive nel valore di $file2.
PS > ($file2 -band [FileAttributes]::Device) -eq [FileAttributes]::Device
True
PS > ($file2 -band [FileAttributes]::Archive) -eq [FileAttributes]::Archive
False