Informazioni su Enumerazione
DESCRIZIONE BREVE
L'istruzione enum
viene usata per dichiarare un'enumerazione. Un'enumerazione è un tipo distinto costituito da un set di etichette denominate denominate elenco di enumeratori.
DESCRIZIONE LUNGA
L'istruzione enum
consente di creare un set fortemente tipizzato di etichette. Tale enumerazione può essere usata nel codice senza dover analizzare o controllare gli errori ortografici.
Le enumerazioni vengono rappresentate internamente come interi con un valore iniziale pari a zero. La prima etichetta nell'elenco viene assegnata al valore zero. Le etichette rimanenti vengono assegnate con numeri consecutivi.
Nella definizione le etichette possono essere date qualsiasi valore integer. Le etichette senza valore assegnato accettano il valore intero successivo.
Sintassi (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 dopo 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 jpeg
jpg
, o 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 GetEnumNames()
metodo 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 GetEnumValues()
metodo 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
Nota: GetEnumNames() e GetEnumValues() sembrano restituire gli stessi risultati.
Tuttavia, internamente, PowerShell modifica i valori in etichette. Leggere attentamente l'elenco e si noterà che oga
e sono menzionati nei risultati "Recupera nomi", ma non nell'output "Recupera valori" simile per jpg
, jpeg
e mpg
mpeg
.mogg
[MediaTypes].GetEnumName(15)
oga
[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. In qualsiasi momento l'enumerazione rappresenta uno o più flag attivati.
Per le enumerazioni come flag per funzionare 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 dei flag
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 usare l'operatore -band
di confronto binario . In questo esempio viene testato gli attributi 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