about_Enum
Krótki opis
Instrukcja enum
służy do deklarowania wyliczenia. Wyliczenie jest odrębnym typem, który składa się z zestawu nazwanych etykiet nazywanych listą modułów wyliczających.
Długi opis
Instrukcja enum
umożliwia utworzenie silnie typizowanego zestawu etykiet. Tego wyliczenia można użyć w kodzie bez konieczności analizowania lub sprawdzania błędów pisowni.
Wyliczenia są wewnętrznie reprezentowane jako liczby całkowite z wartością początkową zero. Pierwsza etykieta na liście ma przypisaną wartość zero. Pozostałe etykiety są przypisywane z kolejnymi numerami.
W definicji etykiety mogą mieć dowolną wartość całkowitą. Etykiety bez przypisanej wartości przyjmują następną wartość całkowitą.
Składnia (podstawowa)
enum <enum-name> {
<label> [= <int-value>]
...
}
Przykład użycia
W poniższym przykładzie przedstawiono wyliczenie obiektów, które można postrzegać jako pliki multimedialne. Definicja przypisuje jawne wartości do podstawowych wartości , music
, picture
video
. Etykiety natychmiast po jawnym przypisaniu otrzymują następną wartość całkowitą. Synonimy można utworzyć, przypisując tę samą wartość do innej etykiety; Zobacz skonstruowane wartości dla: ogg
, , oga
mogg
lub jpg
jpeg
, .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
}
Metoda GetEnumNames()
zwraca listę etykiet dla wyliczenia.
[MediaTypes].GetEnumNames()
unknown
music
mp3
aac
ogg
oga
mogg
picture
jpg
jpeg
png
video
mpg
mpeg
avi
m4v
Metoda GetEnumValues()
zwraca listę wartości wyliczenia.
[MediaTypes].GetEnumValues()
unknown
music
mp3
aac
oga
oga
oga
picture
jpeg
jpeg
png
video
mpeg
mpeg
avi
m4v
Uwaga
GetEnumNames()
i GetEnumValues()
wydaje się zwracać te same wyniki; lista nazwanych wartości. Jednak wewnętrznie wylicza wartości, GetEnumValues()
a następnie mapuje wartości na nazwy. Uważnie przeczytaj listę i zauważysz, że ogg
element , oga
i mogg
pojawi się w danych wyjściowych polecenia GetEnumNames()
, ale dane wyjściowe GetEnumValues()
są wyświetlane oga
tylko . Dzieje się tak samo w przypadku jpg
, jpeg
i mpg
, mpeg
.
Metoda GetEnumName()
może służyć do pobierania nazwy skojarzonej z określoną wartością. Jeśli istnieje wiele nazw skojarzonych z wartością, metoda zwraca alfabetycznie imię.
[MediaTypes].GetEnumName(15)
oga
W poniższym przykładzie pokazano, jak zamapować każdą nazwę na jej wartość.
[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
Wyliczenie jako flagi
Wyliczenia można zdefiniować jako kolekcję flag bitowych. Gdzie w dowolnym momencie wyliczenie reprezentuje co najmniej jedną z tych flag włączonych.
Aby wyliczenie jako flagi działały prawidłowo, każda etykieta powinna mieć moc dwóch wartości.
Składnia (flagi)
[Flags()] enum <enum-name> {
<label 0> [= 1]
<label 1> [= 2]
<label 2> [= 4]
<label 3> [= 8]
...
}
Przykład użycia flag
W poniższym przykładzie utworzono wyliczenie FileAttributes .
[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
Aby przetestować, czy określony element jest ustawiony, możesz użyć operatora -band
porównania binarnego . W tym przykładzie testujemy atrybuty Urządzenie i Archiwum w wartości .$file2
PS > ($file2 -band [FileAttributes]::Device) -eq [FileAttributes]::Device
True
PS > ($file2 -band [FileAttributes]::Archive) -eq [FileAttributes]::Archive
False