Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
BREVE DESCRIÇÃO
A enum instrução é usada para declarar uma enumeração. Uma enumeração é um tipo distinto que consiste em um conjunto de rótulos nomeados chamado lista de enumeradores.
DESCRIÇÃO LONGA
A instrução enum permite criar um conjunto fortemente tipado de rótulos. Essa enumeração pode ser usada no código sem ter que analisar ou verificar erros ortográficos.
As enumerações são representadas internamente como inteiros com um valor inicial de zero. Ao primeiro rótulo da lista é atribuído o valor zero. Os rótulos restantes são atribuídos com números consecutivos.
Na definição, os rótulos podem receber qualquer valor inteiro. Os rótulos sem valor atribuído assumem o próximo valor inteiro.
Sintaxe (básica)
enum <enum-name> {
<label> [= <int-value>]
...
}
Exemplo de utilização
O exemplo a seguir mostra uma enumeração de objetos que podem ser vistos como arquivos de mídia. A definição atribui valores explícitos aos valores subjacentes de music, picture, video. Os rótulos imediatamente após uma atribuição explícita obtêm o próximo valor inteiro. Os sinónimos podem ser criados atribuindo o mesmo valor a outro rótulo; ver os valores construídos para: ogg, oga, mogg, ou jpg, jpegou , ou , mpeg.mpg
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
}
O método GetEnumNames() retorna a lista dos rótulos para a enumeração.
[MediaTypes].GetEnumNames()
unknown
music
mp3
aac
ogg
oga
mogg
picture
jpg
jpeg
png
video
mpg
mpeg
avi
m4v
O método GetEnumValues() retorna a lista dos valores para a enumeração.
[MediaTypes].GetEnumValues()
unknown
music
mp3
aac
oga
oga
oga
picture
jpeg
jpeg
png
video
mpeg
mpeg
avi
m4v
Nota: GetEnumNames() e GetEnumValues() parecem retornar os mesmos resultados.
No entanto, internamente, o PowerShell está transformando valores em rótulos. Leia a lista com atenção e você notará que oga e mogg são mencionados sob os resultados 'Obter nomes', mas não sob a saída semelhante 'Obter valores' para jpg, jpeg, e 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
Enumerações como sinalizadores
As enumerações podem ser definidas como uma coleção de sinalizadores de bits. Onde, em um determinado ponto, a enumeração representa um ou mais desses sinalizadores ativados.
Para que as enumerações como sinalizadores funcionem corretamente, cada rótulo deve ter um poder de dois valores.
Sintaxe (sinalizadores)
[Flags()] enum <enum-name> {
<label 0> [= 1]
<label 1> [= 2]
<label 2> [= 4]
<label 3> [= 8]
...
}
Exemplo de uso de sinalizadores
No exemplo a seguir, a enumeração FileAttributes é criada.
[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 testar se um específico está definido, você pode usar o operador -bandde comparação binária . Neste exemplo, testamos os atributos Device e Archive no valor de $file2.
PS > ($file2 -band [FileAttributes]::Device) -eq [FileAttributes]::Device
True
PS > ($file2 -band [FileAttributes]::Archive) -eq [FileAttributes]::Archive
False