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 die de enumeratorlijst wordt genoemd.

LANGE BESCHRIJVING

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

Opsommingen worden intern weergegeven als gehele getallen met een beginwaarde van nul. Aan het eerste label in de lijst wordt de waarde nul toegewezen. De resterende labels worden toegewezen met opeenvolgende getallen.

In de definitie kunnen labels elke waarde voor een geheel getal worden opgegeven. Labels waaraan geen waarde is toegewezen, nemen de volgende gehele waarde.

Syntaxis (basis)

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

Verbruiksvoorbeeld

In het volgende voorbeeld ziet u een opsomming van objecten die kunnen worden gezien als mediabestanden. De definitie wijst expliciete waarden toe aan de onderliggende waarden van music, picture, video. Labels direct na een expliciete toewijzing krijgen de volgende geheel getalwaarde. Synoniemen kunnen worden gemaakt door dezelfde waarde toe te wijzen aan een ander label; bekijk de samengestelde waarden voor: ogg, oga, mogg, of jpg, jpegof , mpeg.mpg

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 GetEnumNames() methode retourneert de lijst met labels voor de opsomming.

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

De GetEnumValues() methode 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 wijzigt PowerShell echter waarden in labels. Lees de lijst zorgvuldig door en u zult merken dat oga en mogg worden vermeld onder de resultaten 'Namen ophalen', maar niet onder de vergelijkbare uitvoer 'Waarden ophalen' voor jpg, jpegen 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 bitvlagken. Waarbij de opsomming op een bepaald punt een of meer van de ingeschakelde vlaggen vertegenwoordigt.

Voor een goede werking van opsommingen als vlaggen 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 gebruik van vlaggen

In het volgende voorbeeld wordt de opsomming 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

Als u wilt testen of een specifieke instelling is ingesteld, kunt u de binaire vergelijkingsoperator -bandgebruiken. In dit voorbeeld testen we op de kenmerken Apparaat en Archief in de waarde van $file2.

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

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