Condividi tramite


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, ogamogg, o jpegjpg, 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, jpege mpgmpeg.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 -banddi 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