about_Enum

簡単な説明

enum ステートメントは、列挙型を宣言するために使用されます。 列挙型は、列挙子リストと呼ばれる名前付きラベルのセットで構成される個別の型です。

長い説明

enum ステートメントを使用すると、厳密に型指定されたラベルのセットを作成できます。 この列挙体は、解析やスペル ミスのチェックを行わずにコードで使用できます。

列挙型は、内部的には開始値が 0 の整数として表されます。 リストの最初のラベルには、値 0 が割り当てられます。 残りのラベルには、連続した番号が割り当てられます。

この定義では、ラベルには任意の整数値を指定できます。 値が割り当てられていないラベルは、次の整数値を受け取ります。

構文 (基本)

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

使用例

次の例は、メディア ファイルとして表示できるオブジェクトの列挙を示しています。 定義は、musicpicturevideoの基になる値に明示的な値を割り当てます。 明示的な割り当ての直後のラベルは、次の整数値を取得します。 同義語は、同じ値を別のラベルに割り当てることで作成できます。 oggogamogg、または jpgjpeg、または mpgmpeg の構築値を参照してください。

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() は同じ結果を返すように見えます。名前付き値の一覧。 ただし、内部的には、GetEnumValues() は値を列挙し、値を名前にマップします。 一覧をよく読んで、oggの出力に ogamoggGetEnumNames() が表示されますが、GetEnumValues() の出力には ogaのみが表示されます。 jpgjpegmpgmpegでも同じことが起こります。

GetEnumName() メソッドを使用すると、特定の値に関連付けられた名前を取得できます。 値に複数の名前が関連付けられている場合、メソッドはアルファベット順の名前を返します。

[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

フラグとしての列挙型

列挙型は、ビット フラグのコレクションとして定義できます。 ここで、任意の時点で、列挙体はオンになっているフラグの 1 つ以上を表します。

フラグとしての列挙型が正しく機能するには、各ラベルの累乗が 2 の値である必要があります。

構文 (フラグ)

[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 を使用できます。 この例では、 Device 属性と Archive 属性の値を $file2 でテストします。

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

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