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
, jpeg
of , 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
, 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 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 -band
gebruiken. 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