Add post on user friendly C# enums
This commit is contained in:
parent
692db7065e
commit
2b087feceb
70
src/posts/UserFriendlyEnums.md
Normal file
70
src/posts/UserFriendlyEnums.md
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
---
|
||||||
|
title: User Friendly C# Enums
|
||||||
|
description: A couple of extension methods to make getting user friendly information from attributes on enums
|
||||||
|
tags: [ Programming, C# ]
|
||||||
|
---
|
||||||
|
|
||||||
|
These extension methods will get the name and description from the `[Display]` attribute on enums. This allows you to add user-friendly names and descriptions on the enums themselves.
|
||||||
|
|
||||||
|
## How to use
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public enum MyEnum
|
||||||
|
{
|
||||||
|
[Display(Name = "First Value", Description = "First value description")]
|
||||||
|
FirstValue,
|
||||||
|
[Display(Name = "Second Value")]
|
||||||
|
SecondValue,
|
||||||
|
ThirdValue
|
||||||
|
}
|
||||||
|
|
||||||
|
MyEnum.FirstValue.GetDisplayName(); // "First Value"
|
||||||
|
MyEnum.ThirdValue.GetDisplayName(); // "ThirdValue"
|
||||||
|
|
||||||
|
MyEnum.FirstValue.GetDisplayDescription(); // "First value description"
|
||||||
|
MyEnum.SecondValue.GetDisplayDescription(); // null
|
||||||
|
MyEnum.ThirdValue.GetDisplayDescription(); // null
|
||||||
|
|
||||||
|
// Generate a list of options from an enum
|
||||||
|
IList<string> options = Enum.GetValues<MyEnum>()
|
||||||
|
.Select(e => e.GetDisplayName())
|
||||||
|
.ToList();
|
||||||
|
```
|
||||||
|
|
||||||
|
## Code
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
public static class Extensions
|
||||||
|
{
|
||||||
|
#region Enum DisplayAttribute
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the name from the DisplayAttribute or returns the enum as a string
|
||||||
|
/// if there is no DisplayAttribute name
|
||||||
|
/// </summary>
|
||||||
|
public static string GetDisplayName(this Enum value)
|
||||||
|
{
|
||||||
|
return value.GetType()
|
||||||
|
.GetMember(value.ToString())
|
||||||
|
.First()
|
||||||
|
.GetCustomAttribute<DisplayAttribute>()
|
||||||
|
?.Name
|
||||||
|
?? value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Gets the description from the DisplayAttribute</summary>
|
||||||
|
public static string? GetDisplayDescription(this Enum value)
|
||||||
|
{
|
||||||
|
return value.GetType()
|
||||||
|
.GetMember(value.ToString())
|
||||||
|
.FirstOrDefault()
|
||||||
|
?.GetCustomAttribute<DisplayAttribute>()
|
||||||
|
?.Description;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
```
|
Loading…
Reference in a new issue