【问题标题】:Using Enum Description for ComboBox使用 ComboBox 的枚举描述
【发布时间】:2018-12-09 09:32:54
【问题描述】:

我一直在我正在编程的系统中使用各种枚举和组合框。我有一些带有这样描述的枚举:

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。我已经看到了很多不同的方法来获得它,但我无法让它拉出描述以显示在组合框中。

我想做的是为每个组合框设置一个我可以引用的方法?我需要为每个枚举集设置一个方法吗?

感谢您的帮助!

【问题讨论】:

标签: c# enums combobox


【解决方案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>();

【讨论】:

  • 我在应用这个时遇到了几个问题。我不确定我是否缺少名称空间或其他东西。 ?.Description - 无效的表达式术语 '.' .Description - 语法错误,':' 预期 p.ToString() - ;预期的 )) - 无效的表达式术语 ')'
  • @TreyStaley ".?"或空条件运算符适用于 c# 版本 6。这里是更多信息 csharp.today/…
猜你喜欢
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多