Freigeben über


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, , pictureexplizite videoWerte 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, moggoder jpg, jpegoder 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, jpegund 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 -bandverwenden. 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