This post was originally published on Coding Glamour.

Nogal vaak zie ik code in een MVC Controller staan als:

public enum Pagina
{
     [UrlPart("")]
     Index,
     [UrlPart("about-us")]
     OverOns,
}

Waarbij er acties zijn als:

public void MaakLink (Pagina targetPagina)
{
     string urlPart = ...;
     // hierboven moeilijke code om 'UrlPart' attribute te vinden
     // op de huidige waarde van de enum
}

Daarom vandaag een kleine snippet, die eenvoudig een attribute kan uitlezen van een enum, waarbij de syntax als volgt wordt:

string urlPart = targetPagina.GetCustomAttribute<UrlPartAttribute>().EenProperty;
Implementatie
Als extension method vrij eenvoudig te bakken als je je beseft dat waardes van een enum als 'fields' op het type zitten:

    public static class EnumExtender
    {
        public static T GetCustomAttribute<T>(this System.Enum enumValue)
            where T : class
        {
            T[] attributes = (T[]) enumValue.GetType().GetField(enumValue.ToString()).GetCustomAttributes(typeof(T), false);
            return attributes.Length > 0 ? attributes[0] : default(T);
        }
    }