Delen via


Over Enum

KORTE BESCHRIJVING

De enum instructie wordt gebruikt om een opsomming te declareren. Een opsomming is een uniek type dat bestaat uit een set benoemde labels, de enumeratorlijst genoemd.

LANGE BESCHRIJVING

Met de enum-instructie kunt u een sterk getypte set labels maken. Die opsomming kan in de code worden gebruikt zonder te hoeven parseren of controleren op spelfouten.

Opsommingen worden intern weergegeven als gehele getallen met een startwaarde van nul. Aan het eerste label in de lijst wordt de waarde nul toegekend. De overige labels worden voorzien van opeenvolgende nummers.

In de definitie kunnen labels elke gehele waarde krijgen. Labels waaraan geen waarde is toegewezen, nemen de volgende gehele waarde.

Syntaxis (basis)

enum <enum-name> {
    <label> [= <int-value>]
    ...
}

Gebruiksvoorbeeld

In het volgende voorbeeld ziet u een opsomming van objecten die als mediabestanden kunnen worden gezien. De definitie wijst expliciete waarden toe aan de onderliggende waarden van music, picture, video. Labels direct na een expliciete toewijzing krijgen de volgende gehele waarde. Synoniemen kunnen worden gemaakt door dezelfde waarde aan een ander label toe te kennen; Zie de geconstrueerde waarden voor: , , , of jpg, jpeg, of 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
}

De methode GetEnumNames() retourneert de lijst met de labels voor de opsomming.

[MediaTypes].GetEnumNames()
unknown
music
mp3
aac
ogg
oga
mogg
picture
jpg
jpeg
png
video
mpg
mpeg
avi
m4v

De methode GetEnumValues() retourneert de lijst met de waarden voor de opsomming.

[MediaTypes].GetEnumValues()
unknown
music
mp3
aac
oga
oga
oga
picture
jpeg
jpeg
png
video
mpeg
mpeg
avi
m4v

Opmerking: GetEnumNames() en GetEnumValues() lijken dezelfde resultaten te retourneren. Intern verandert PowerShell echter waarden in labels. Lees de lijst aandachtig en u zult merken dat oga en mogg worden vermeld onder de resultaten van 'Namen ophalen', maar niet onder de vergelijkbare uitvoer van 'Waarden ophalen' voor jpg, jpeg, en 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

Opsommingen als vlaggen

Opsommingen kunnen worden gedefinieerd als een verzameling bitvlaggen. Waar, op een bepaald punt, de opsomming een of meer van die vlaggen vertegenwoordigt die zijn ingeschakeld.

Om opsommingen als vlaggen goed te laten werken, moet elk label een macht van twee waarden hebben.

Syntaxis (vlaggen)

[Flags()] enum <enum-name> {
    <label 0> [= 1]
    <label 1> [= 2]
    <label 2> [= 4]
    <label 3> [= 8]
    ...
}

Voorbeeld van het gebruik van vlaggen

In het volgende voorbeeld wordt de opsomming van FileAttributes gemaakt.

[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 te testen of een specifieke is ingesteld, kunt u de binaire vergelijkingsoperator -bandgebruiken. In dit voorbeeld testen we op de kenmerken Device en Archive in de waarde van $file2.

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

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