Sdílet prostřednictvím


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, moggnebo jpg, jpegnebo , . mpegmpg

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, jpega 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