about_Enum

Rövid leírás

Az enum utasítás enumerálás deklarálásához használható. Az enumerálás egy különálló típus, amely nevesített címkékből, úgynevezett enumerátorlistából áll.

Hosszú leírás

Az enum utasítással szigorúan gépelt címkéket hozhat létre. Ez az enumerálás használható a kódban anélkül, hogy elemeznie vagy ellenőriznie kellene a helyesírási hibákat.

Az enumerálások belsőleg nulla kezdőértékkel rendelkező egész számokként jelennek meg. A lista első címkéje a nulla értéket kapja. A többi címke egymást követő számokkal van hozzárendelve.

A definícióban a címkék bármilyen egész számot megadhatnak. Az érték nélküli címkék a következő egész számot veszik fel.

Szintaxis (alapszintű)

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

Használati példa

Az alábbi példa a médiafájlokként látható objektumok enumerálását mutatja be. A definíció explicit értékeket rendel a music, picturevideo. Az explicit hozzárendelést közvetlenül követő címkék a következő egész számot kapják meg. Szinonimák úgy hozhatók létre, hogy ugyanazt az értéket egy másik címkéhez rendelik; lásd a következő értékeit: ogg, oga, mogg, vagy jpg, jpegvagy 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
}

A GetEnumNames() metódus az enumerálás címkéinek listáját adja vissza.

[MediaTypes].GetEnumNames()
unknown
music
mp3
aac
ogg
oga
mogg
picture
jpg
jpeg
png
video
mpg
mpeg
avi
m4v

A GetEnumValues() metódus az enumerálás értékeinek listáját adja vissza.

[MediaTypes].GetEnumValues()
unknown
music
mp3
aac
oga
oga
oga
picture
jpeg
jpeg
png
video
mpeg
mpeg
avi
m4v

Megjegyzés

GetEnumNames() és GetEnumValues() úgy tűnik, hogy ugyanazokat az eredményeket adja vissza; az elnevezett értékek listája. Belsőleg azonban enumerálja az értékeket, GetEnumValues() majd az értékeket nevekké képezi le. Olvassa el figyelmesen a listát, és megfigyelheti, hogy ogaogga , és mogg megjelenik a kimenetbenGetEnumNames(), de csak a kimenete GetEnumValues() láthatóoga. Ugyanez történik , jpgjpegés mpg, mpeg.

A GetEnumName() metódussal lekérhető egy adott értékhez társított név. Ha egy értékhez több név is társítva van, a metódus betűrendben az utónevet adja vissza.

[MediaTypes].GetEnumName(15)
oga

Az alábbi példa bemutatja, hogyan képezheti le az egyes neveket az értékére.

[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

Enumerálások jelzőként

Az enumerálások bitjelölők gyűjteményeként definiálhatók. Ahol az enumerálás egy vagy több bekapcsolt jelzőt jelöl.

Ahhoz, hogy az enumerálások jelzőként megfelelően működjenek, minden címkének két értékkel kell rendelkeznie.

Szintaxis (jelzők)

[Flags()] enum <enum-name> {
    <label 0> [= 1]
    <label 1> [= 2]
    <label 2> [= 4]
    <label 3> [= 8]
    ...
}

Példa jelzők használatára

Az alábbi példában létrejön a FileAttributes enumerálás.

[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

Egy adott beállítás teszteléséhez használhatja a bináris összehasonlító operátort -band. Ebben a példában az Eszköz és az Archív attribútumokat teszteljük az értékben $file2.

PS > ($file2 -band [FileAttributes]::Device) -eq [FileAttributes]::Device
True

PS > ($file2 -band [FileAttributes]::Archive) -eq [FileAttributes]::Archive
False