À 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
, mogg
ou jpg
, jpeg
ou , 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
, jpeg
et 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 -band
de 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