Informationen zur Enumeration
KURZE BESCHREIBUNG
Die enum
-Anweisung wird verwendet, um eine -Enumeration zu deklarieren. Eine Enumeration ist ein eindeutiger Typ, der aus einer Reihe benannter Bezeichnungen besteht, die als Enumeratorliste bezeichnet werden.
LANGE BESCHREIBUNG
Mit enum
der -Anweisung können Sie einen stark typisierten Satz von Bezeichnungen erstellen. Diese Enumeration kann im Code verwendet werden, ohne dass sie analysiert oder auf Rechtschreibfehler überprüft werden muss.
Enumerationen werden intern als ganze Zahlen mit dem Anfangswert 0 (null) dargestellt. Der ersten Bezeichnung in der Liste wird der Wert 0 (null) zugewiesen. Die übrigen Bezeichnungen werden mit aufeinanderfolgenden Nummern zugewiesen.
In der Definition können Bezeichnungen einen beliebigen ganzzahligen Wert erhalten. Bezeichnungen ohne zugewiesenen Wert übernehmen den nächsten ganzzahligen Wert.
Syntax (Basic)
enum <enum-name> {
<label> [= <int-value>]
...
}
Verwendungsbeispiel
Das folgende Beispiel zeigt eine Enumeration von Objekten, die als Mediendateien angezeigt werden können. Die Definition weist den zugrunde liegenden Werten von music
, , picture
explizite video
Werte zu. Bezeichnungen, die unmittelbar auf eine explizite Zuweisung folgen, erhalten den nächsten ganzzahligen Wert. Synonyme können erstellt werden, indem derselbe Wert einer anderen Bezeichnung zugewiesen wird. Siehe die konstruierten Werte für: ogg
, oga
, mogg
oder jpg
, jpeg
oder mpg
, . mpeg
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
}
Die GetEnumNames()
-Methode gibt die Liste der Bezeichnungen für die Enumeration zurück.
[MediaTypes].GetEnumNames()
unknown
music
mp3
aac
ogg
oga
mogg
picture
jpg
jpeg
png
video
mpg
mpeg
avi
m4v
Die GetEnumValues()
-Methode gibt die Liste der Werte für die Enumeration zurück.
[MediaTypes].GetEnumValues()
unknown
music
mp3
aac
oga
oga
oga
picture
jpeg
jpeg
png
video
mpeg
mpeg
avi
m4v
Hinweis: GetEnumNames() und GetEnumValues() scheinen die gleichen Ergebnisse zurückzugeben.
Intern ändert PowerShell jedoch Werte in Bezeichnungen. Lesen Sie die Liste sorgfältig, und Sie werden feststellen, dass oga
und mogg
unter den "Get Names"-Ergebnissen erwähnt werden, aber nicht unter der ähnlichen Ausgabe "Get Values" für jpg
, jpeg
und 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
Enumerationen als Flags
Enumerationen können als Sammlung von Bitflags definiert werden. Dabei stellt die Enumeration zu einem bestimmten Zeitpunkt ein oder mehrere dieser aktivierten Flags dar.
Damit Enumerationen als Flags ordnungsgemäß funktionieren, sollte jede Bezeichnung über eine Potenz von zwei Werten verfügen.
Syntax (Flags)
[Flags()] enum <enum-name> {
<label 0> [= 1]
<label 1> [= 2]
<label 2> [= 4]
<label 3> [= 8]
...
}
Beispiel für die Verwendung von Flags
Im folgenden Beispiel wird die FileAttributes-Enumeration erstellt.
[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
Um zu testen, dass ein bestimmtes festgelegt ist, können Sie den binären Vergleichsoperator -band
verwenden. In diesem Beispiel testen wir die Attribute Device und Archive im Wert von $file2
.
PS > ($file2 -band [FileAttributes]::Device) -eq [FileAttributes]::Device
True
PS > ($file2 -band [FileAttributes]::Archive) -eq [FileAttributes]::Archive
False