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]
相关推荐
在C#等编程语言中,枚举可以帮助我们编写更清晰、更具可读性的代码。然而,标准枚举仅支持基本数据类型(如int、byte等)的值,有时我们可能需要为每个枚举成员存储额外的信息,比如描述、关联的配置数据等。这时,...
在.NET框架中,C#的特性(Attribute)是一种元数据,可以附加到代码的各种元素上,如类、方法、属性等,以提供额外的信息。这些信息可以在运行时被反射机制读取,从而实现各种功能。在标题“C#特性Attribute的实际...
在C#中,我们使用`[Attribute]`语法来应用一个Attribute实例到我们的代码元素上。 二、创建自定义Attribute 要创建自定义Attribute,我们需要继承自`System.Attribute`基类,并定义所需的属性和方法。例如,我们...
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 属性是逻辑上的类数据...
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#编程中,枚举(Enums)是一种强大的工具,用于定义一组相关的命名常量。枚举类型可以让我们更清晰地表达代码中的意图,提高代码的可读性和可维护性。而特性(Attributes)则是C#中一种元数据,允许我们在代码中...
- 例: `public string MyProperty { get; set; }` **5.12 事件** - 使用Pascal大小写。 - 例: `public event EventHandler MyEvent;` **5.13 常量 (const)** - 使用全大写字母,单词间用下划线分隔。 - 例: `...
2. 枚举操作:`Enum.Parse()`和`Enum.TryParse()`用于将字符串转换为枚举值,`Enum.GetNames()`和`Enum.GetValues()`返回枚举的所有值或名称。 六、Attribute获取 `Attribute`类是自定义元数据的基类。通过`Type....
**特性**(Attribute)是.NET Framework的一个关键特性,它允许开发者向代码中添加元数据。特性通常用于注解代码,比如指定方法或类的行为方式。例如: ```csharp [DLLImport("User32.dll")] public static extern ...
- 使用自动属性(auto-implemented properties)简化属性定义,如`public string MyProperty { get; set; }`。 - 避免在循环体中进行不必要的计算,提升性能。 - 使用readonly字段表示不可变状态,提高安全性。 ...
c#枚举值增加特性说明是指在c#语言中,使用特性(Attribute)来给枚举类型增加说明。这种方法可以使枚举类型更加灵活和强大。 在c#语言中,枚举类型是用于定义一组命名常量的数据类型。枚举类型的每个值都可以使用...
- 示例:`public int MyProperty { get; set; }` - **事件** - 事件名使用Pascal大小写。 - 示例:`public event EventHandler MyEvent;` - **常量(Const)** - 常量名使用全大写,并用下划线分隔单词。 - ...
- `get`和`set`访问器分别用于获取和设置私有成员的值,如`rhs_t`。 11. **索引器(Indexer)**: - 索引器允许通过索引来访问对象,就像访问数组一样,如`this[int i]`。 12. **初始化与构造函数**: - C#不支持...
public string Description { get; set; } public DescriptionAttribute(string description) { this.Description = description; } } ``` 使用描述特性,我们可以将枚举值与其对应的描述关联起来,例如: ``` ...
- **属性**:提供对私有成员变量的访问控制,类似get和set方法。 - **属性(Attribute)**:用于添加声明性元数据,可以在运行时查询。 - **泛型**:提供类型安全和性能优化,允许在不指定具体类型的情况下编写可...
### C#语言规范知识点概述 #### 一、介绍 **1.1 HelloWorld程序** - **定义**: “HelloWorld”程序通常作为编程入门的第一个示例,用于演示如何在控制台输出一行文字“Hello, World!”。 - **代码示例**: ```...
- 示例:`public string Name { get; set; }` **事件** - 事件名称采用Pascal大小写。 - 示例:`public event EventHandler DataProcessed` **常量(CONST)** - 常量名称全部大写,单词间用下划线分隔。 - 示例:...
public class MyCustomAttribute : Attribute { public string Description { get; set; } } [MyCustom(Description = "This is a sample method.")] public void SampleMethod() { // ... } ``` #### 2. 词法...
public class VersionAttribute : Attribute { public string Version { get; } public VersionAttribute(string version) { Version = version; } } [Version("1.0")] class MyClass { // 类实现 } ``` ##...