Come rimappare C# enum su valori codificati

Ho scritto una versione aggiornata di questo post qui

Spesso capita di utilizzare degli enum nel codice di logica di business e poi di doverli convertire in valori codificati per il salvataggio su database: questo spesso implica un mappaggio manuale dai valori enum ai valori codificati, ad esempio con una funzione di tipo switch.

Grazie a Reflection e agli attributi di System.ComponentModel si possono invece associare nativamente i valori codificati agli enum e recuperarli all’occorrenza in modo diretto.

Ecco come procedere.
Innanzitutto quando si crea l’enum gli si associano i valori codificati, attraverso l’attributo Description:

using System;
using System.ComponentModel;

public enum  eOrderStatus
{
    [Description("PEN")]
    Pending,
    [Description("CAN")]
    Canceled,
    [Description("CON")]
    Confirmed,
    [Description("PAY")]
    Payed,
    [Description("SHI")]
    Shipped
}

Poi includete questa classe di utility nel vostro progetto, che contiene il metodo di recupero del valore che usa reflection:

using System;
using System.Reflection;
using System.ComponentModel;

public class EnumHelper
{
    public static string GetCodeFromEnum(Enum value)
    {
        FieldInfo fi = value.GetType().GetField(value.ToString());
        DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
        return (attributes.Length > 0) ? attributes[0].Description : value.ToString();
    }
}

A questo punto il gioco è fatto; quando avete bisogno di ottenere il valore codificato corrispondente a un certo valore di enum è sufficiente operare come nel seguente esempio:

[…]
string orderStatus = EnumHelper.GetCodeFromEnum(newStatus);
[…]

Published martedì 10 luglio 2007 23.11 by marcodelgatto
Filed under: , ,

Comments

No Comments

Leave a Comment

(required) 
(required) 
(optional)
(required) 
Powered by Community Server (Commercial Edition), by Telligent Systems