about_Enum
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; eine Liste mit benannten Werten. Listet die Werte jedoch intern auf, GetEnumValues()
und ordnet die Werte dann namen zu. Lesen Sie die Liste sorgfältig, und Sie werden feststellen, dass ogg
, oga
und mogg
in der Ausgabe von GetEnumNames()
angezeigt werden, aber die Ausgabe von GetEnumValues()
zeigt oga
nur an. Dasselbe gilt für jpg
, jpeg
und mpg
, mpeg
.
Die GetEnumName()
-Methode kann verwendet werden, um einen Namen abzurufen, der einem bestimmten Wert zugeordnet ist. Wenn einem Wert mehrere Namen zugeordnet sind, gibt die Methode den alphabetischen Vornamen zurück.
[MediaTypes].GetEnumName(15)
oga
Das folgende Beispiel zeigt, wie jeder Name seinem Wert zugeordnet wird.
[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