我覺得你的代碼很漂亮!
唯一的改進是將代碼放在擴展方法。
編輯:
當我仔細想想,你想要做的是使用Enum
作爲定義,而不是枚舉,這是擴展方法所要求的一個實例。
我發現這個question,解決它真的很好:
public class SelectList
{
// Normal SelectList properties/methods go here
public static Of<T>()
{
Type t = typeof(T);
if (t.IsEnum)
{
var values = from Enum e in Enum.GetValues(type)
select new { ID = e, Name = e.ToString() };
return new SelectList(values, "Id", "Name");
}
return null;
}
}
// called with
var list = SelectList.Of<Things>();
只有你可能要返回Dictionary<int, string>
而不是SelectList
,但你的想法。
EDIT2:
在這裏,我們覆蓋你正在看的情況下的代碼示例去。
public class EnumList
{
public static IEnumerable<KeyValuePair<T, string>> Of<T>()
{
return Enum.GetValues(typeof (T))
.Cast<T>()
.Select(p => new KeyValuePair<T, string>(p, p.ToString()))
.ToList();
}
}
還是這個版本或許,這裏的關鍵是int
public class EnumList
{
public static IEnumerable<KeyValuePair<int, string>> Of<T>()
{
return Enum.GetValues(typeof (T))
.Cast<T>()
.Select(p => new KeyValuePair<int, string>(Convert.ToInt32(p), p.ToString()))
.ToList();
}
}
如果您的解決方案有效,您爲什麼尋找更簡單的解決方案? – 2011-04-12 16:52:40
@ Ramhound:我雖然也許有一種*直接*的方式。我理解我的代碼,但不是每個人都可以簡單地做到這一點。所以我尋找更簡單的一個。 – Homam 2011-04-12 16:54:57
@Homam我不知道你是否打算這樣,但是當我爲自己的解決方案建模後,爲了正確顯示組合框中的值,必須在我的select語句中反轉鍵和值類型。您的方法最終顯示組合框中的按鍵。 – gonzobrains 2013-09-06 17:41:55