Informazioni su enumAbout Enum

DESCRIZIONE BREVESHORT DESCRIPTION

L' enum istruzione viene usata per dichiarare un'enumerazione.The enum statement is used to declare an enumeration. Un'enumerazione è un tipo distinto costituito da un set di etichette denominate denominato elenco di enumeratori.An enumeration is a distinct type that consists of a set of named labels called the enumerator list.

DESCRIZIONE LUNGALONG DESCRIPTION

L' enum istruzione consente di creare un set di etichette fortemente tipizzato.The enum statement allows you to create a strongly typed set of labels. Tale enumerazione può essere utilizzata nel codice senza dover analizzare o verificare la presenza di errori di ortografia.That enumeration can be used in the code without having to parse or check for spelling errors.

Le enumerazioni sono rappresentate internamente come numeri interi con un valore iniziale pari a zero.Enumerations are internally represented as integers with a starting value of zero. Alla prima etichetta dell'elenco viene assegnato il valore zero.The first label in the list is assigned the value zero. Le etichette rimanenti vengono assegnate con numeri consecutivi.The remaining labels are assigned with consecutive numbers.

Nella definizione è possibile assegnare a etichette qualsiasi valore intero.In the definition, labels can be given any integer value. Le etichette senza valore assegnato accettano il valore integer successivo.Labels with no value assigned take the next integer value.

Sintassi (base)Syntax (basic)

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

Esempio di utilizzoUsage example

Nell'esempio seguente viene illustrata un'enumerazione di oggetti che possono essere visualizzati come file multimediali.The following example shows an enumeration of objects that can be seen as media files. La definizione assegna valori espliciti ai valori sottostanti di music , picture , video .The definition assigns explicit values to the underlying values of music, picture, video. Le etichette immediatamente successive a un'assegnazione esplicita ottengono il valore intero successivo.Labels immediately following an explicit assignment get the next integer value. È possibile creare sinonimi assegnando lo stesso valore a un'altra etichetta. vedere i valori costruiti per: 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
}

Il GetEnumNames() metodo restituisce l'elenco delle etichette per l'enumerazione.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

Il GetEnumValues() metodo restituisce l'elenco dei valori per l'enumerazione.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 () e GetEnumValues () sembrano restituire gli stessi risultati.Note : GetEnumNames() and GetEnumValues() seem to return the same results. Tuttavia, internamente, PowerShell modifica i valori in etichette.However, internally, PowerShell is changing values into labels. Leggere attentamente l'elenco e si noterà che oga e mogg sono citati nei risultati "Get names", ma non sotto l'output simile a "Get values" per jpg , jpeg e 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

Enumerazioni come flagEnumerations as flags

Le enumerazioni possono essere definite come una raccolta di flag di bit.Enumerations can be defined as a collection of bit flags. Dove, in un determinato punto, l'enumerazione rappresenta uno o più dei flag accesi.Where, at any given point the enumeration represents one or more of those flags turned on.

Per il corretto funzionamento delle enumerazioni come flag, ogni etichetta deve avere una potenza di due valori.For enumerations as flags to work properly, each label should have a power of two value.

Sintassi (flag)Syntax (flags)

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

Esempio di utilizzo di flagFlags usage example

Nell'esempio seguente viene creata l'enumerazione 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

Per verificare che sia impostato un oggetto specifico, è possibile usare l'operatore di confronto binario -band .To test that a specific is set, you can use the binary comparison operator -band. In questo esempio si testano gli attributi Device e Archive nel valore di $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