Om uppräkning
KORT BESKRIVNING
-instruktionen enum
används för att deklarera en uppräkning. En uppräkning är en distinkt typ som består av en uppsättning namngivna etiketter som kallas uppräkningslistan.
LÅNG BESKRIVNING
Med instruktionen enum
kan du skapa en starkt typad uppsättning etiketter. Uppräkningen kan användas i koden utan att behöva parsa eller söka efter stavfel.
Uppräkningar representeras internt som heltal med ett startvärde på noll. Den första etiketten i listan tilldelas värdet noll. De återstående etiketterna tilldelas med efterföljande siffror.
I definitionen kan etiketter ges valfritt heltalsvärde. Etiketter utan tilldelat värde tar nästa heltalsvärde.
Syntax (grundläggande)
enum <enum-name> {
<label> [= <int-value>]
...
}
Användningsexempel
I följande exempel visas en uppräkning av objekt som kan ses som mediefiler. Definitionen tilldelar explicita värden till de underliggande värdena music
för , picture
, video
. Etiketter direkt efter en explicit tilldelning får nästa heltalsvärde. Synonymer kan skapas genom att tilldela samma värde till en annan etikett. se de konstruerade värdena för: , , , eller jpg
, jpeg
eller mpg
, mpeg
. mogg
oga
ogg
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
}
Metoden GetEnumNames()
returnerar listan över etiketterna för uppräkningen.
[MediaTypes].GetEnumNames()
unknown
music
mp3
aac
ogg
oga
mogg
picture
jpg
jpeg
png
video
mpg
mpeg
avi
m4v
Metoden GetEnumValues()
returnerar listan över värdena för uppräkningen.
[MediaTypes].GetEnumValues()
unknown
music
mp3
aac
oga
oga
oga
picture
jpeg
jpeg
png
video
mpeg
mpeg
avi
m4v
Obs! GetEnumNames() och GetEnumValues() verkar returnera samma resultat.
Internt ändrar PowerShell dock värden till etiketter. Läs listan noggrant så ser du att oga
och mogg
nämns under resultatet "Hämta namn", men inte under "Hämta värden" liknande utdata för jpg
, jpeg
och mpg
, mpeg
.
[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
Uppräkningar som flaggor
Uppräkningar kan definieras som en samling bitflaggor. Om uppräkningen vid en viss tidpunkt representerar en eller flera av dessa flaggor aktiverade.
För att uppräkningar som flaggor ska fungera korrekt bör varje etikett ha två värden.
Syntax (flaggor)
[Flags()] enum <enum-name> {
<label 0> [= 1]
<label 1> [= 2]
<label 2> [= 4]
<label 3> [= 8]
...
}
Exempel på flagganvändning
I följande exempel skapas FileAttributes-uppräkningen .
[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
Om du vill testa att en specifik har angetts kan du använda operatorn -band
för binär jämförelse . I det här exemplet testar vi för attributen Enhet och Arkiv i värdet $file2
för .
PS > ($file2 -band [FileAttributes]::Device) -eq [FileAttributes]::Device
True
PS > ($file2 -band [FileAttributes]::Archive) -eq [FileAttributes]::Archive
False