列挙型の値を List に変換する
Enum.GetValues メソッドを使って値の配列を取得。さらに Enumerable.Cast メソッドと ToList メソッドを使い List に変換します。
Dim list = [Enum].GetValues(GetType(列挙体)).Cast(Of 列挙体)().ToList()
var list = Enum.GetValues(typeof(列挙体)).Cast<列挙体>().ToList();
これでおk
こんな感じで使います。
' VB.NET Option Explicit On Option Strict On Imports System.Linq Module Module1 Enum BayStars Kisyoshi = 0 Miura = 1 Blanco = 2 Nori = 3 Aranami = 4 End Enum Sub Main() Dim enumValues = [Enum].GetValues(GetType(BayStars)).Cast(Of BayStars)().ToList() For Each value In enumValues Console.WriteLine(value) Next Console.ReadLine() End Sub End Module
// C# using System; using System.Linq; class Program { enum BayStars { Kisyoshi = 0, Miura = 1, Blanco = 2, Nori = 3, Aranami = 4, }; static void Main(string[] args) { var enumValues = Enum.GetValues(typeof(BayStars)).Cast<BayStars>().ToList(); foreach (var value in enumValues) { Console.WriteLine(value); } Console.ReadLine(); } }
列挙型の落とし穴
#2013/05/27 17:50 追記
このエントリ公開したら [twitter:@ugaya40] さんより有難い指摘頂きました。重複Enumだと同値が上書き*1される問題があるようです。
例えば
class Program { // わざとポジションをかぶらせてみる・・・ enum BayStars { Tsutsugo = 5, Nori = 5, Aranami = 8, Morgan = 8 }; static void Main(string[] args) { var enumValues = Enum.GetValues(typeof(BayStars)).Cast<BayStars>().ToList(); foreach (var value in enumValues) { Console.WriteLine(value); } Console.ReadLine(); } }
とか書くと
Nori
Nori
Aranami
Aranami
という楽しい結果になってしまうという問題 \(^o^)/
さらに
とご指摘のように System.Windows.Input.Key 列挙体なんかだと、もう目も当てられない事態に。。。
まあ値を明示的に指定しないならいいのでしょうが、使いどころ考えて慎重に使う必要がありますね。