Freigeben über


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, , 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; 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, ogaund mogg in der Ausgabe von GetEnumNames()angezeigt werden, aber die Ausgabe von GetEnumValues() zeigt oganur an. Dasselbe gilt für jpg, jpegund 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 -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