C#使用枚举的摘要标记

C#使用枚举的摘要标记,c#,wpf,enums,C#,Wpf,Enums,我有以下列举: public enum eFlexCreateMode { Man = 0, Auto = 1 } 我将其转换为字典以便在wpf页面中使用(绑定为combobox) Dictionary EnumCreateMode=Enum.GetValues(typeof(eFlexCreateMode)).Cast().ToDictionary(t=>(int)t,t=>t.ToString()); 现在,我放置枚举中每个项的摘要标记,并将其用作组合框的工具提示。有可能

我有以下列举:

public enum eFlexCreateMode
{
    Man = 0,
    Auto = 1
}
我将其转换为字典以便在wpf页面中使用(绑定为combobox)

Dictionary EnumCreateMode=Enum.GetValues(typeof(eFlexCreateMode)).Cast().ToDictionary(t=>(int)t,t=>t.ToString());

现在,我放置枚举中每个项的摘要标记,并将其用作组合框的工具提示。有可能完成这样的任务吗?没有可用的文档

以下是获取描述值的简要示例。您应该添加适当的空检查,例如。。。这只是一个例子

// Usage Example
static void Main()
{
    var chanelDesc = Channel.Wholesale.GetEnumDescriptionValue();
    Console.WriteLine(chanelDesc);
    Console.ReadKey();
}

public static class EnumExtensions
{
    public static string GetEnumDescriptionValue<T>(this T @enum) where T : struct
    {
        if(!typeof(T).IsEnum)
            throw new InvalidOperationException();

        return typeof(T).GetField(@enum.ToString()).GetCustomAttribute<DescriptionAttribute>(false).Description;
    }
}

public enum Channel
{
    [Description("Banked - Retail")]
    Dtc,
    Correspondent,
    [Description("Banked - Wholesale")]
    Wholesale
}
//用法示例
静态void Main()
{
var chanelDesc=Channel.Wholesale.GetEnumDescriptionValue();
控制台写入线(chanelDesc);
Console.ReadKey();
}
公共静态类枚举扩展
{
公共静态字符串GetEnumDescriptionValue(此T@enum),其中T:struct
{
if(!typeof(T).IsEnum)
抛出新的InvalidOperationException();
返回typeof(T).GetField(@enum.ToString()).GetCustomAttribute(false).Description;
}
}
公共枚举通道
{
[说明(“银行-零售”)]
Dtc,
记者:,
[说明(“银行-批发”)]
批发
}

否,使用
描述属性
。您可以通过反射来获取它的内容。(我假设您正在写
文档注释)是的,生成xml文档,加载它,查找枚举,查找枚举元素,阅读摘要。。。是的,很多工作。。。因此,正如Trea所写:使用DescriptionAttribute如果你想让你的UI使用任何枚举,那么属性就是最好的选择。否则,在视图模型中手动创建
Dictionary
(初始化的getter-only属性),将combobox
ItemsSource
绑定到它,完成。好吧,这不利于绑定。。。Sintar提供了指向解决方案的链接,其中
DescriptionAttribute
与custom一起使用Converter@Selvin,您正在使用MVVM作为设计模式,对吗?这是一个实用程序,它将获取属性值以设置您应该绑定到的属性。。。
// Usage Example
static void Main()
{
    var chanelDesc = Channel.Wholesale.GetEnumDescriptionValue();
    Console.WriteLine(chanelDesc);
    Console.ReadKey();
}

public static class EnumExtensions
{
    public static string GetEnumDescriptionValue<T>(this T @enum) where T : struct
    {
        if(!typeof(T).IsEnum)
            throw new InvalidOperationException();

        return typeof(T).GetField(@enum.ToString()).GetCustomAttribute<DescriptionAttribute>(false).Description;
    }
}

public enum Channel
{
    [Description("Banked - Retail")]
    Dtc,
    Correspondent,
    [Description("Banked - Wholesale")]
    Wholesale
}