using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Reflection; using Microsoft.AspNet.Mvc.Rendering; using Microsoft.Extensions.Localization; namespace Yavsc.Extensions { public static class EnumExtensions { public static List GetSelectList (Type type, IStringLocalizer SR, Enum valueSelected) { var typeInfo = type.GetTypeInfo(); var values = Enum.GetValues(type).Cast(); var items = new List(); foreach (var value in values) { items.Add(new SelectListItem { Text = SR[GetDescription(value, typeInfo)], Value = value.ToString(), Selected = value == valueSelected }); } return items; } public static List GetSelectList (Type type, IStringLocalizer SR) { var typeInfo = type.GetTypeInfo(); var values = Enum.GetValues(type).Cast(); var items = new List(); foreach (var value in values) { items.Add(new SelectListItem { Text = SR[GetDescription(value, typeInfo)], Value = value.ToString() }); } return items; } public static string GetDescription(this Enum value, TypeInfo typeInfo ) { var declaredMember = typeInfo.DeclaredMembers.FirstOrDefault(i => i.Name == value.ToString()); var attribute = declaredMember?.GetCustomAttribute(); return attribute == null ? value.ToString() : attribute.Description ?? attribute.Name; } public static string GetDescription(this Enum value) { var type = value.GetType(); var typeInfo = type.GetTypeInfo(); return GetDescription(value, typeInfo); } public static IEnumerable GetDescriptions(Type type) { var values = Enum.GetValues(type).Cast(); var descriptions = new List(); foreach (var value in values) { descriptions.Add(value.GetDescription()); } return descriptions; } public static Enum GetEnumFromDescription(string description, Type enumType) { var enumValues = Enum.GetValues(enumType).Cast(); var descriptionToEnum = enumValues.ToDictionary(k => k.GetDescription(), v => v); return descriptionToEnum[description]; } } }