我正在编程的系统中使用过各种枚举和组合框。我有一些枚举,像这样的描述:
public enum Week
{
[Description("Week 01")]
Week01,
[Description("Week 02")]
Week02,
[Description("Week 03")]
Week03,
[Description("Week 04")]
Week04,
[Description("Week 05")]
Week05
}
并且:
public enum Year
{
[Description("2000")]
Y2000,
[Description("2001")]
Y2001,
[Description("2002")]
Y2002,
[Description("2003")]
Y2003,
[Description("2004")]
Y2004,
[Description("2005")]
Y2005
}
对于组合框,我一直在使用以下简单代码:
weekComboBox.DataSource = Enum.GetValues(typeof(Week));
yearComboBox.DataSource = Enum.GetValues(typeof(Year));
这将设置预期的常规枚举值。我想做的是显示[Description()]
属性(“ Week 01”或“ 2002”)而不是Week01或Y2002。我已经看到了各种各样的方法来获取此信息,但是我还无法获得将其描述显示在组合框中的信息。
我想做的是设置一个我可以针对每个组合框引用的单一方法?我需要为每个枚举集设置一个方法吗?
感谢您的帮助!
答案 0 :(得分:1)
public static 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.GetType().GetField(p.ToString())
.GetCustomAttributes(typeof(DescriptionAttribute), false)
.FirstOrDefault() as DescriptionAttribute)?.Description ?? p.ToString()
))
.ToList();
}
}
然后:
weekComboBox.DisplayMember = "Value";
weekComboBox.ValueMember = "Key";
weekComboBox.DataSource = EnumList.Of<Week>();