プログラミングをしていると、当たり前のことを当たり前にやるのに往生することがある。それは人生も同じ(笑いどころ)
やりたいことがすごくハッキリとしているにも関わらず、ウネウネと遠回りしている方法で実現しているレファレンスばかり見つかって、ふへ〜とタバコを吸いたくもなる。
それは特にXamlを触っている時に多いけれど、つい最近、Enumのメンバーをすべて列挙するにはどうすればいいかわからなくなった。
Enumのメンバーを列挙するという、「列挙型を列挙する」方法って、そういえばあまりやってこなかったなと。
この禅問答のような問への回答は、Microsoftが用意している。やったぜナデラ!
そのものずばりなEnum.GetValues()
こういう列挙体を列挙したいとする。
1 2 3 4 5 6 7 8 |
enum AwesomeSong { HeyJude, MarryYou, CallMeMaybe, StarshipTrooper, AndMore } |
それには、Enum.GetValues()メソッドを使ってenumメンバーを全取得すればいい。
GetValues()に渡すのは、enumの型情報。
この作例では、メンバーを取得し、文字列に変換し、コンソールに出力している。ごちゃごちゃとやっているけれど、foreachの一行だけが今回の重要ポイント。
1 2 3 4 5 6 7 8 9 |
var builder = new StringBuilder(); foreach (var songNameMember in Enum.GetValues(typeof(AwesomeSong))) { builder.AppendLine(songNameMember.ToString()); } Console.WriteLine("I love these songs..."); Console.Write(builder.ToString()); |
これを実行するとこうなる。
1 2 3 4 5 6 |
I love these songs... HeyJude MarryYou CallMeMaybe StarshipTrooper AndMore |
GetNames()もあるでよ
ちなみに、今回のように文字列としてenumメンバーが欲しいだけならGetNames()を使うと、enumメンバーを文字列化する手間が省けてなおイイ。
1 2 3 4 |
foreach (var songName in Enum.GetNames(typeof(AwesomeSong))) { builder.AppendLine(songName); } |
C#おすすめ図書
他の言語をやったことがあって、その言語の作法でC#を書いちゃったことのある人へ
他人にとって読みやすいコードを書くための永遠の名著