C# Tips

C# Tip Article

How to display custom string for enum value

How can we show user-defined string for enum value? For example, want to display "Standard Card" for CardType.StandardCard.

public enum CardType
{
	StandardCard = 1,
	SilverCard = 2,
	GoldCard = 3,
}

One way of doing it is to make use of DisplayAttribute in System.ComponentModel.DataAnnotations namespace. Add [Display(Name="")] attribute to each enum member.

public enum CardType
{
	[Display(Name = "Standard Card")]
	StandardCard = 1,
	[Display(Name = "Silver Card")]
	SilverCard = 2,
	[Display(Name = "Gold Card")]
	GoldCard = 3,
}

And then, add an extension method for Enum type. In the extension method, we can use .NET reflection to retrieve the custom attribute (DisplayAttribute).

using System.ComponentModel.DataAnnotations; //for DisplayAttribute

public static class Extensions
{	
	public static string ToDisplayName(this Enum en)
	{
		var attrs = en.GetType()
					.GetMember(en.ToString())
					.Single()
					.GetCustomAttributes(typeof(DisplayAttribute), false);
		return ((DisplayAttribute)attrs[0]).Name;
	}
}

Once the extension method is defined, we can simply call enum.ToDisplayName().


string strCard = CardType.StandardCard.ToDisplayName();