Acerca de enumAbout Enum

DESCRIPCIÓN BREVESHORT DESCRIPTION

La enum instrucción se utiliza para declarar una enumeración.The enum statement is used to declare an enumeration. Una enumeración es un tipo distinto que consta de un conjunto de etiquetas con nombre denominado lista de enumeradores.An enumeration is a distinct type that consists of a set of named labels called the enumerator list.

DESCRIPCIÓN LARGALONG DESCRIPTION

La enum instrucción permite crear un conjunto de etiquetas fuertemente tipadas.The enum statement allows you to create a strongly typed set of labels. Esa enumeración se puede usar en el código sin tener que analizar o comprobar si hay errores ortográficos.That enumeration can be used in the code without having to parse or check for spelling errors.

Las enumeraciones se representan internamente como enteros con un valor inicial de cero.Enumerations are internally represented as integers with a starting value of zero. A la primera etiqueta de la lista se le asigna el valor cero.The first label in the list is assigned the value zero. Las etiquetas restantes se asignan con números consecutivos.The remaining labels are assigned with consecutive numbers.

En la definición, las etiquetas pueden tener cualquier valor entero.In the definition, labels can be given any integer value. Las etiquetas sin ningún valor asignado toman el siguiente valor entero.Labels with no value assigned take the next integer value.

Sintaxis (básica)Syntax (basic)

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

Ejemplo de usoUsage example

En el ejemplo siguiente se muestra una enumeración de los objetos que se pueden ver como archivos multimedia.The following example shows an enumeration of objects that can be seen as media files. La definición asigna valores explícitos a los valores subyacentes de music , picture , video .The definition assigns explicit values to the underlying values of music, picture, video. Las etiquetas inmediatamente después de una asignación explícita obtienen el siguiente valor entero.Labels immediately following an explicit assignment get the next integer value. Los sinónimos se pueden crear asignando el mismo valor a otra etiqueta; Vea los valores construidos para: ogg , oga , mogg o, jpg jpeg o mpg , mpeg .Synonyms can be created by assigning the same value to another label; see the constructed values for: ogg, oga, mogg, or jpg, jpeg, or 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
}

El GetEnumNames() método devuelve la lista de etiquetas para la enumeración.The GetEnumNames() method returns the list of the labels for the enumeration.

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

El GetEnumValues() método devuelve la lista de los valores de la enumeración.The GetEnumValues() method returns the list of the values for the enumeration.

[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.Note : GetEnumNames() and GetEnumValues() seem to return the same results. Sin embargo, internamente, PowerShell está cambiando los valores por etiquetas.However, internally, PowerShell is changing values into labels. Lea la lista detenidamente y observará que oga y mogg se mencionan en los resultados de "obtener nombres", pero no en la salida similar "obtener valores" para jpg , jpeg y mpg , mpeg .Read the list carefully and you'll notice that oga and mogg are mentioned under the 'Get Names' results, but not under the 'Get Values' similar output for jpg, jpeg, and 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

Enumeraciones como marcasEnumerations as flags

Las enumeraciones se pueden definir como una colección de marcadores de bits.Enumerations can be defined as a collection of bit flags. Donde, en un momento dado, la enumeración representa una o varias de esas marcas activadas.Where, at any given point the enumeration represents one or more of those flags turned on.

En el caso de las enumeraciones como marcas que funcionan correctamente, cada etiqueta debe tener una potencia de dos valores.For enumerations as flags to work properly, each label should have a power of two value.

Sintaxis (marcas)Syntax (flags)

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

Ejemplo de uso de marcadoresFlags usage example

En el ejemplo siguiente se crea la enumeración FileAttributes .In the following example the FileAttributes enumeration is created.

[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 comprobar que se ha establecido un específico, puede usar el operador de comparación binaria -band .To test that a specific is set, you can use the binary comparison operator -band. En este ejemplo, se prueban los atributos del dispositivo y del archivo en el valor de $file2 .In this example, we test for the Device and the Archive attributes in the value of $file2.

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

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