Share via


À propos d’Enum

DESCRIPTION COURTE

L’instruction enum est utilisée pour déclarer une énumération. Une énumération est un type distinct qui se compose d’un ensemble d’étiquettes nommées appelée liste d’énumérateurs.

DESCRIPTION DÉTAILLÉE

L’instruction enum vous permet de créer un ensemble d’étiquettes fortement typées. Cette énumération peut être utilisée dans le code sans avoir à analyser ou à case activée pour les fautes d’orthographe.

Les énumérations sont représentées en interne sous forme d’entiers avec une valeur de départ de zéro. La valeur zéro est affectée à la première étiquette de la liste. Les étiquettes restantes sont affectées avec des nombres consécutifs.

Dans la définition, les étiquettes peuvent recevoir n’importe quelle valeur entière. Les étiquettes sans valeur affectée prennent la valeur entière suivante.

Syntaxe (de base)

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

Exemple d’utilisation

L’exemple suivant montre une énumération d’objets qui peuvent être vus comme des fichiers multimédias. La définition affecte des valeurs explicites aux valeurs sous-jacentes de music, picture, video. Les étiquettes immédiatement après une affectation explicite obtiennent la valeur entière suivante. Vous pouvez créer des synonymes en affectant la même valeur à une autre étiquette ; consultez les valeurs construites pour : ogg, oga, moggou jpg, jpegou , ou 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
}

La GetEnumNames() méthode retourne la liste des étiquettes pour l’énumération.

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

La GetEnumValues() méthode retourne la liste des valeurs de l’énumération.

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

Remarque : GetEnumNames() et GetEnumValues() semblent retourner les mêmes résultats. Toutefois, en interne, PowerShell change les valeurs en étiquettes. Lisez attentivement la liste et vous remarquerez que oga et mogg sont mentionnés sous les résultats « Obtenir des noms », mais pas sous la sortie « Obtenir les valeurs » pour jpg, jpeget 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

Énumérations en tant qu’indicateurs

Les énumérations peuvent être définies comme une collection d’indicateurs de bits. Où, à un moment donné, l’énumération représente un ou plusieurs de ces indicateurs activés.

Pour que les énumérations en tant qu’indicateurs fonctionnent correctement, chaque étiquette doit avoir une puissance de deux valeurs.

Syntaxe (indicateurs)

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

Exemple d’utilisation des indicateurs

Dans l’exemple suivant, l’énumération FileAttributes est créée.

[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

Pour tester qu’un spécifique est défini, vous pouvez utiliser l’opérateur -bandde comparaison binaire . Dans cet exemple, nous testons les attributs Device et Archive dans la valeur de $file2.

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

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