`

c# - Get enum from enum attribute

    博客分类:
  • C#
c# 
阅读更多

DescriptionAttribute gives the enum or other qualified types some description which is human readable. 

such as 

    public enum Testing
    {
        [Description("David Gouge")]
        Dave = 1,
        [Description("Peter Gouge")]
        Pete = 2,
        [Description("Marie Gouge")]
        Ree = 3
    }

 

 But, given this, how do you find the an Enum value based on the the description value atached to the field?

you can use this

            var descriptionToMatch = new DescriptionAttribute("David Gouge");
 
            Testing testing = Enum.GetValues(typeof (Testing))
                                  .Cast<Testing>()
                                  .Where(v => descriptionToMatch.Equals(v.GetDescription()))
                                  .FirstOrDefault();

 

In order to use that you will need to define some extension method, I hvae wrote up two. (the Linq one is the one that I wrote for mysef.)

    static class StaticEnumHelper
    {
        public static DescriptionAttribute GetDescription(this Enum enu)
        {
            DescriptionAttribute attr = enu.GetType()
                                           .GetField(enu.ToString())
                                           .GetCustomAttributes(typeof(DescriptionAttribute), false)
                                           .SingleOrDefault() as DescriptionAttribute;
            return attr ?? null;
        }
 
        public static string GetDescription2(this Enum value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }
 
            string description = value.ToString();
            FieldInfo fieldInfo = value.GetType().GetField(description);
            DescriptionAttribute[] attributes =
               (DescriptionAttribute[])
             fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
 
            if (attributes != null && attributes.Length > 0)
            {
                description = attributes[0].Description;
            }
            return description;
        }
    }
 

 

Referneces:

Finding an enum value by its Description Attribute [Duplicate] 

Get Enum from enum attribute

DescriptionAttribute class

 

分享到:
评论

相关推荐

    给枚举值增加扩展数据

    在C#等编程语言中,枚举可以帮助我们编写更清晰、更具可读性的代码。然而,标准枚举仅支持基本数据类型(如int、byte等)的值,有时我们可能需要为每个枚举成员存储额外的信息,比如描述、关联的配置数据等。这时,...

    C#特性Attribute的实际应用之:为应用程序提供多个版本

    在.NET框架中,C#的特性(Attribute)是一种元数据,可以附加到代码的各种元素上,如类、方法、属性等,以提供额外的信息。这些信息可以在运行时被反射机制读取,从而实现各种功能。在标题“C#特性Attribute的实际...

    Attribute标记属性_资料收集

    在C#中,我们使用`[Attribute]`语法来应用一个Attribute实例到我们的代码元素上。 二、创建自定义Attribute 要创建自定义Attribute,我们需要继承自`System.Attribute`基类,并定义所需的属性和方法。例如,我们...

    C#与.NET技术平台实战演练.part1

    12-2-2 使用属性的好处12-3 属性的种类12-4 使用存取元12-4-1 使用get存取元12-4-2 使用set存取元12-4-3 使用get.set存取元12-5 编译器运作的情形12-6 属性与类数据成员的比较12-6-1 属性是逻辑上的类数据...

    C#与.NET技术平台实战演练.part2

    12-2-2 使用属性的好处12-3 属性的种类12-4 使用存取元12-4-1 使用get存取元12-4-2 使用set存取元12-4-3 使用get.set存取元12-5 编译器运作的情形12-6 属性与类数据成员的比较12-6-1 属性是逻辑上的类数据...

    C#特性与枚举值遍历

    在C#编程中,枚举(Enums)是一种强大的工具,用于定义一组相关的命名常量。枚举类型可以让我们更清晰地表达代码中的意图,提高代码的可读性和可维护性。而特性(Attributes)则是C#中一种元数据,允许我们在代码中...

    C#编程规范

    - 例: `public string MyProperty { get; set; }` **5.12 事件** - 使用Pascal大小写。 - 例: `public event EventHandler MyEvent;` **5.13 常量 (const)** - 使用全大写字母,单词间用下划线分隔。 - 例: `...

    c# 反射实例

    2. 枚举操作:`Enum.Parse()`和`Enum.TryParse()`用于将字符串转换为枚举值,`Enum.GetNames()`和`Enum.GetValues()`返回枚举的所有值或名称。 六、Attribute获取 `Attribute`类是自定义元数据的基类。通过`Type....

    C#面试基础题(几个基本的面试题 但很多人不是很清楚)

    **特性**(Attribute)是.NET Framework的一个关键特性,它允许开发者向代码中添加元数据。特性通常用于注解代码,比如指定方法或类的行为方式。例如: ```csharp [DLLImport("User32.dll")] public static extern ...

    C#代码编程规范.rar

    - 使用自动属性(auto-implemented properties)简化属性定义,如`public string MyProperty { get; set; }`。 - 避免在循环体中进行不必要的计算,提升性能。 - 使用readonly字段表示不可变状态,提高安全性。 ...

    c#枚举值增加特性说明(推荐)

    c#枚举值增加特性说明是指在c#语言中,使用特性(Attribute)来给枚举类型增加说明。这种方法可以使枚举类型更加灵活和强大。 在c#语言中,枚举类型是用于定义一组命名常量的数据类型。枚举类型的每个值都可以使用...

    C#编程规范 V2.0【含书签】

    - 示例:`public int MyProperty { get; set; }` - **事件** - 事件名使用Pascal大小写。 - 示例:`public event EventHandler MyEvent;` - **常量(Const)** - 常量名使用全大写,并用下划线分隔单词。 - ...

    C# primer.pdf

    - `get`和`set`访问器分别用于获取和设置私有成员的值,如`rhs_t`。 11. **索引器(Indexer)**: - 索引器允许通过索引来访问对象,就像访问数组一样,如`this[int i]`。 12. **初始化与构造函数**: - C#不支持...

    C#如何给枚举类型增加一个描述特性详解

    public string Description { get; set; } public DescriptionAttribute(string description) { this.Description = description; } } ``` 使用描述特性,我们可以将枚举值与其对应的描述关联起来,例如: ``` ...

    C#程序设计复习总结.pdf

    - **属性**:提供对私有成员变量的访问控制,类似get和set方法。 - **属性(Attribute)**:用于添加声明性元数据,可以在运行时查询。 - **泛型**:提供类型安全和性能优化,允许在不指定具体类型的情况下编写可...

    C#中文文档.pdf

    ### C#语言规范知识点概述 #### 一、介绍 **1.1 HelloWorld程序** - **定义**: “HelloWorld”程序通常作为编程入门的第一个示例,用于演示如何在控制台输出一行文字“Hello, World!”。 - **代码示例**: ```...

    c#编程规范

    - 示例:`public string Name { get; set; }` **事件** - 事件名称采用Pascal大小写。 - 示例:`public event EventHandler DataProcessed` **常量(CONST)** - 常量名称全部大写,单词间用下划线分隔。 - 示例:...

    C# 3.0语言详解

    public class MyCustomAttribute : Attribute { public string Description { get; set; } } [MyCustom(Description = "This is a sample method.")] public void SampleMethod() { // ... } ``` #### 2. 词法...

    c#语言规范

    public class VersionAttribute : Attribute { public string Version { get; } public VersionAttribute(string version) { Version = version; } } [Version("1.0")] class MyClass { // 类实现 } ``` ##...

Global site tag (gtag.js) - Google Analytics