Compartir a través de


Acerca de Enum

DESCRIPCIÓN BREVE

La enum instrucción se usa para declarar una enumeración. Una enumeración es un tipo distinto que consta de un conjunto de etiquetas con nombre denominada lista de enumeradores.

DESCRIPCIÓN LARGA

La instrucción enum permite crear un conjunto fuertemente tipado de etiquetas. Esa enumeración se puede usar en el código sin tener que analizar o comprobar si hay errores ortográficos.

Las enumeraciones se representan internamente como enteros con un valor inicial de cero. A la primera etiqueta de la lista se le asigna el valor cero. A las etiquetas restantes se les asignan números consecutivos.

En la definición, a las etiquetas se les puede dar cualquier valor entero. Las etiquetas sin ningún valor asignado toman el siguiente valor entero.

Sintaxis (básica)

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

Ejemplo de uso

En el ejemplo siguiente se muestra una enumeración de objetos que se pueden ver como archivos multimedia. La definición asigna valores explícitos a los valores subyacentes de music, picture, video. Las etiquetas inmediatamente después de una asignación explícita obtienen el siguiente valor entero. Los sinónimos se pueden crear asignando el mismo valor a otra etiqueta; Consulte los valores construidos para: , , , o jpg, jpeg, o mpg, mpeg. moggogaogg

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
}

El método GetEnumNames() devuelve la lista de etiquetas de la enumeración.

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

El método GetEnumValues() devuelve la lista de los valores de la enumeración.

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

Nota: GetEnumNames() y GetEnumValues() parecen devolver los mismos resultados. Sin embargo, internamente, PowerShell está cambiando los valores en etiquetas. Lea la lista detenidamente y notará que oga y mogg se mencionan en los resultados de 'Obtener nombres', pero no en la salida similar de 'Obtener valores' para jpg, jpeg, y , mpeg.mpg

[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

Enumeraciones como marcas

Las enumeraciones se pueden definir como una colección de marcas de bits. Donde, en un momento dado, la enumeración representa una o varias de las marcas activadas.

Para que las enumeraciones como marcas funcionen correctamente, cada etiqueta debe tener una potencia de dos valores.

Sintaxis (indicadores)

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

Ejemplo de uso de banderas

En el ejemplo siguiente se crea la enumeración 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

Para probar que se establece un elemento específico, puede utilizar el operador -bandde comparación binaria . En este ejemplo, probamos los atributos Device y Archive en el valor de $file2.

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

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