Custom Attributes op enum's
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;
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);
}
}
There are 5 comments on this article, read them on Coding Glamour.