about_Enum

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 výčtů.

Dlouhý popis

Příkaz enum umožňuje vytvořit sadu popisků se silným typem. Tento výčet lze 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 nuly. První popisek v seznamu má přiřazenou hodnotu nula. Zbývající popisky jsou přiřazené s po sobě jdoucími čísly.

V definici lze popisky zadat libovolnou celočíselnou hodnotu. Popisky bez přiřazené hodnoty převezmou další celočíselnou hodnotu.

Syntaxe (základní)

enum <enum-name> {
    <label> [= <int-value>]
    ...
}

Příklad použití

Následující příklad ukazuje výčet objektů, které lze vidět jako multimediální soubory. Definice přiřadí explicitní hodnoty podkladovým hodnotám , music, picturevideo. Popisky hned za explicitním přiřazením získají další celočíselnou hodnotu. Synonyma lze vytvořit přiřazením stejné hodnoty jinému popisku; viz vytvořené hodnoty pro: ogg, oga, moggnebo jpgjpeg, mpgmpeg.

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

GetEnumNames() a GetEnumValues() zdá se, že vrací stejné výsledky; seznam pojmenovaných hodnot. Interně však hodnoty vyčísluje GetEnumValues() a pak mapuje hodnoty na názvy. Pečlivě si přečtěte seznam a všimnete si, že oggoga, a mogg zobrazí se ve výstupu GetEnumNames(), ale výstup GetEnumValues() pouze zobrazuje oga. Totéž se stane pro jpg, jpega mpg, mpeg.

Metodu GetEnumName() lze použít k získání názvu přidruženého ke konkrétní hodnotě. Pokud existuje více názvů přidružených k hodnotě, vrátí metoda abecedně křestní jméno.

[MediaTypes].GetEnumName(15)
oga

Následující příklad ukazuje, jak mapovat každý název na jeho hodnotu.

[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 těchto příznaků zapnutých.

Pro správné fungování výčtů jako příznaků by každý popisek měl mít 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 se vytvoří 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

K otestování, že je nastavena určitá hodnota, můžete použít binární relační operátor -band. V tomto příkladu otestujeme 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