03 junio 2025

C# Enum description

using System.ComponentModel;
using System.Reflection;

#nullable disable

namespace Tools.Domain.Helpers;

/// <summary>
/// Proporciona métodos auxiliares para trabajar con enumeradores.
/// </summary>
public static class EnumHelper
{
    /// <summary>
    /// Obtiene la descripción asociada a un valor de enumerador utilizando el atributo <see cref="DescriptionAttribute"/>.
    /// Si no se encuentra el atributo <see cref="DescriptionAttribute"/>, devuelve el nombre del valor del enumerador.
    /// </summary>
    /// <param name="value">El valor del enumerador del cual se desea obtener la descripción.</param>
    /// <returns>
    /// La descripción del valor del enumerador si existe el atributo <see cref="DescriptionAttribute"/>;
    /// de lo contrario, el nombre del valor del enumerador.
    /// </returns>
    /// <example>
    /// Ejemplo de uso:
    /// <code>
    /// public enum Status
    /// {
    ///     [Description("Activo")]
    ///     Active = 1,
    ///     [Description("Inactivo")]
    ///     Inactive = 2,
    ///     [Description("Eliminado")]
    ///     Deleted = 3
    /// }
    ///
    /// Console.WriteLine(EnumHelper.GetDescription(Status.Active)); // Salida: "Activo"
    /// </code>
    /// </example>
    public static string GetDescription(Enum value)
    {
        FieldInfo field = value.GetType().GetField(value.ToString());
        DescriptionAttribute attribute = field.GetCustomAttribute<DescriptionAttribute>();

        if (attribute == null) { return value.ToString(); }

        return attribute?.Description ?? value.ToString();
    }
}

/// <summary>
/// Representa los estados de un elemento en el sistema.
/// </summary>
public enum Status
{
    /// <summary>
    /// Estado Activo.
    /// Indica que el elemento está disponible y en uso.
    /// </summary>
    [Description("Activo")]
    Active = 1,

    /// <summary>
    /// Estado Inactivo.
    /// Indica que el elemento no está disponible temporalmente.
    /// </summary>
    [Description("Inactivo")]
    Inactive = 2,

    /// <summary>
    /// Estado Eliminado.
    /// Indica que el elemento ha sido marcado como eliminado
    /// y no debe mostrarse en las operaciones normales del sistema.
    /// </summary>
    [Description("Eliminado")]
    Deleted = 3
}

No hay comentarios: