Dela via


about_Enum

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 typifierad 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 startvärdet 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 musicfö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, jpegeller mpg, mpeg. moggogaogg

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

Anteckning

GetEnumNames() och GetEnumValues() verkar returnera samma resultat, en lista med namngivna värden. Internt räknar du dock GetEnumValues() upp värdena och mappar sedan värden till namn. Läs listan noggrant så ser du att ogg, ogaoch mogg visas i utdata GetEnumNames()för , men utdata GetEnumValues() för visar ogabara . Samma sak händer för jpg, jpegoch mpg, mpeg.

Metoden GetEnumName() kan användas för att hämta ett namn som är associerat med ett visst värde. Om det finns flera namn som är associerade med ett värde returnerar metoden det alfabetiskt förnamn.

[MediaTypes].GetEnumName(15)
oga

I följande exempel visas hur du mappar varje namn till dess värde.

[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. Där uppräkningen vid en viss tidpunkt representerar en eller flera av de aktiverade flaggorna.

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 -bandför binär jämförelse . I det här exemplet testar vi för attributen Enhet och Arkiv i värdet $file2för .

PS > ($file2 -band [FileAttributes]::Device) -eq [FileAttributes]::Device
True

PS > ($file2 -band [FileAttributes]::Archive) -eq [FileAttributes]::Archive
False