O výčtu
KRÁTKÝ POPIS
Příkaz enum
slouží k deklaraci výčtu. Výčet je jedinečný typ, který se skládá ze sady pojmenovaných popisků označovaných jako seznam enumerátoru.
DLOUHÝ POPIS
Příkaz enum
umožňuje vytvořit sadu popisků silného typu. Tento výčet je možné použít v kódu, aniž byste museli analyzovat nebo kontrolovat pravopisné chyby.
Výčty jsou interně reprezentovány jako celá čísla s počáteční hodnotou nula. Prvnímu popisku v seznamu je přiřazena hodnota nula. Zbývající popisky jsou přiřazeny po sobě jdoucími čísly.
V definici lze popiskům zadat libovolnou celočíselnou hodnotu. Popisky bez přiřazené hodnoty přebírají další celočíselnou hodnotu.
Syntaxe (základní)
enum <enum-name> {
<label> [= <int-value>]
...
}
Příklad využití
Následující příklad ukazuje výčet objektů, které lze zobrazit jako multimediální soubory. Definice přiřadí explicitní hodnoty k podkladovým hodnotám music
, picture
, . video
Popisky bezprostředně za explicitním přiřazením získají další celočíselnou hodnotu. Synonyma lze vytvořit přiřazením stejné hodnoty k jinému popisku; podívejte se na vytvořené hodnoty pro: ogg
, oga
, mogg
nebo jpg
, jpeg
nebo , . mpeg
mpg
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()
vrátí seznam popisků výčtu.
[MediaTypes].GetEnumNames()
unknown
music
mp3
aac
ogg
oga
mogg
picture
jpg
jpeg
png
video
mpg
mpeg
avi
m4v
Metoda GetEnumValues()
vrátí seznam hodnot výčtu.
[MediaTypes].GetEnumValues()
unknown
music
mp3
aac
oga
oga
oga
picture
jpeg
jpeg
png
video
mpeg
mpeg
avi
m4v
Poznámka: Zdá se, že funkce GetEnumNames() a GetEnumValues() vrací stejné výsledky.
PowerShell ale interně mění hodnoty na popisky. Pečlivě si přečtěte seznam a všimněte si, že oga
jsou mogg
uvedené ve výsledcích Získání názvů, ale ne ve výstupu Získat hodnoty podobné pro jpg
, jpeg
a 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
Výčty jako příznaky
Výčty lze definovat jako kolekci bitových příznaků. Kde v libovolném okamžiku výčet představuje jeden nebo více z těchto příznaků zapnutých.
Aby výčty jako příznaky fungovaly správně, měl by mít každý popisek mocninu dvou hodnot.
Syntaxe (příznaky)
[Flags()] enum <enum-name> {
<label 0> [= 1]
<label 1> [= 2]
<label 2> [= 4]
<label 3> [= 8]
...
}
Příklad použití příznaků
V následujícím příkladu je vytvořen výčet 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
Chcete-li otestovat, že konkrétní je nastavena, můžete použít binární porovnávací operátor -band
. V tomto příkladu testujeme atributy Device a Archive v hodnotě $file2
.
PS > ($file2 -band [FileAttributes]::Device) -eq [FileAttributes]::Device
True
PS > ($file2 -band [FileAttributes]::Archive) -eq [FileAttributes]::Archive
False