Enum クラス
id:siokoshou:20080124 に続いて再び enum ネタ。偶然すばらしいものを発見してしまったので。
こないだは enum の具体的な実装、例えば enum MyEnum としたときの MyEnum と拡張メソッドは相性がいいってネタだったけど、今回は Enum クラスのメソッド Parse とかをきれいに書くネタ。
Parse よく使いますが、見た目が汚いんですよね。ネタ元から引用すると
MyEnum enumValue = (MyEnum) Enum.Parse(typeof (MyEnum), stringValue);
これを Enum
MyEnum enumValue = Enum<MyEnum>.Parse(stringValue);
スッキリ! Enum
public static class Enum<T> { public static T Parse(string value) { return (T) Enum.Parse(typeof (T), value); } public static IList<T> GetValues() { IList<T> list = new List<T>(); foreach (object value in Enum.GetValues(typeof (T))) { list.Add((T) value); } return list; } }
すばらしすぎ! class Enum と class Enum
where T : enum と制約できれば最高なんだけどそれは無理なので、struct 制約つけたり、static コンストラクタで T が enum かチェックしたりすればもっとよいかも。あとは残りのメソッドを一つずつくるんでいけばOK。
GetValues() などは LINQ なら一行で書けるので LINQ の練習にどうぞ。
でも、速度の問題は未解決(-_-)。