列挙値は、文字列で列挙値の名前を指定することができます。
例えば Console の背景色を DarkRed に変更する、次のようなコードは、
[Console]::BackgroundColor = [ConsoleColor]::DarkRed;
次のコードのように指定することもできます。
[Console]::BackgroundColor = "DarkRed";
また、ビットフィールドの列挙値の組み合わせも、各列挙値をカンマ区切りで繋げた文字列で指定することができます。
例えば、Object クラスに定義されている非公開のインスタンスメソッドを取得する、次のようなコードは、
[Object].GetMethods([System.Reflection.BindingFlags]::NonPublic -bor [System.Reflection.BindingFlags]::Instance) | % { $_.ToString(); };
次のコードのように指定することもできます。
[Object].GetMethods("Public, NonPublic, Instance") | % { $_.ToString(); };
見ての通り、列挙値を文字列で指定すると文字数がだいぶ節約できます。
ただし、オーバーロードの解決が期待通りにされない場合もあるので注意です。
例えば、Object クラスに定義されている非公開の FieldGetter メソッドを取得する場合、次のようなコードではオーバーロードの解決が期待通りになりません。
[Object].GetMethod("FieldGetter", "NonPublic, Instance") | % { $_.ToString(); };
この場合、次のコードのように明示的にキャストを行う必要があります。
[Object].GetMethod("FieldGetter", [System.Reflection.BindingFlags]"NonPublic, Instance") | % { $_.ToString(); };
このことにさえ気を付けていれば、列挙値の指定は文字列で行った方が楽だし可読性にも優れていると思います。
コメント