我觉得你的代码很漂亮!
唯一的改进是将代码放在扩展方法。
编辑:
当我仔细想想,你想要做的是使用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