共用方式為


關於列舉

簡短描述

語句 enum 用來宣告列舉。 列舉是一種相異的類型,由一組名為 列舉值清單的具名標籤所組成。

詳細描述

enum語句可讓您建立強型別標籤。 該列舉可以在程序代碼中使用,而不需要剖析或檢查拼字錯誤。

列舉在內部以整數表示,其起始值為零。 清單中的第一個標籤會指派零值。 其餘標籤會以連續的數位指派。

在定義中,標籤可以指定任何整數值。 未指派任何值的標籤會採用下一個整數值。

語法 (基本)

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

使用範例

下列範例顯示可視為媒體檔案的物件列舉。 定義會將明確值指派給 、、 picturevideo的基礎值music。 緊接在明確指派後面的標籤會取得下一個整數值。 同義字可以藉由將相同的值指派給另一個標籤來建立;請參閱 的建構值:、、、 或jpegjpg、 或 mpgmpegmoggogaogg

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
}

方法 GetEnumNames() 會傳回列舉的標籤清單。

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

方法 GetEnumValues() 會傳回列舉值的清單。

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

注意:GetEnumNames () 和 GetEnumValues () 似乎傳回相同的結果。 不過,在內部,PowerShell 正在將值變更為標籤。 仔細閱讀清單,您會注意到 和 ogamogg 會在 [取得名稱] 結果底下提及,但不會在 、 jpegmpegmpg的類似輸出jpg下提及。

[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

列舉作為旗標

列舉可以定義為位旗標的集合。 其中,列舉在任何指定點代表開啟的一或多個旗標。

若要將列舉當做旗標正常運作,每個標籤都應該有兩個值的乘冪。

語法 (旗標)

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

旗標使用範例

在下列範例中,會建立 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

若要測試是否已設定特定,您可以使用二進位比較運算子 -band。 在此範例中,我們會在的值$file2中測試 DeviceArchive 屬性。

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

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