using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Linq; using Humanizer; namespace Artemis.UI.Shared { /// /// Provides utilities for display enums in a human readable form /// public static class EnumUtilities { /// /// Gets a human readable description of the given enum value /// /// The value to get a description for /// A human readable description of the given enum value public static string Description(this Enum value) { object[] attributes = value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), false); if (attributes.Any()) return (attributes.First() as DescriptionAttribute).Description; // If no description is found, the least we can do is replace underscores with spaces // You can add your own custom default formatting logic here TextInfo ti = CultureInfo.CurrentCulture.TextInfo; return ti.ToTitleCase(ti.ToLower(value.ToString().Replace("_", " "))); } /// /// Creates a list containing a for each value in the enum type /// /// The enum type to create value descriptions for /// A list containing a for each value in the enum type public static IEnumerable GetAllValuesAndDescriptions(Type t) { if (!t.IsEnum) throw new ArgumentException($"{nameof(t)} must be an enum type"); return Enum.GetValues(t).Cast().Select(e => new ValueDescription {Value = e, Description = e.Humanize()}).ToList(); } /// /// Humanizes the given enum value using the Humanizer library /// /// The enum value to humanize /// A humanized string describing the given value public static string HumanizeValue(Enum value) { return value.Humanize(); } } public class ValueDescription { public object Value { get; set; } public string Description { get; set; } } }