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:
Publicar un comentario