using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace TMDbLib.Utilities { public static class EnumExtensions { public static string GetDescription(this T enumerationValue) where T : struct { Type type = enumerationValue.GetType(); TypeInfo typeInfo = type.GetTypeInfo(); if (!typeInfo.IsEnum) { throw new ArgumentException("EnumerationValue must be of Enum type", nameof(enumerationValue)); } IEnumerable members = typeof(T).GetTypeInfo().DeclaredMembers; string requestedName = enumerationValue.ToString(); // Tries to find a DisplayAttribute for a potential friendly name for the enum foreach (MemberInfo member in members) { if (member.Name != requestedName) continue; foreach (CustomAttributeData attributeData in member.CustomAttributes) { if (attributeData.AttributeType != typeof(EnumValueAttribute)) continue; // Pull out the Value if (!attributeData.ConstructorArguments.Any()) break; CustomAttributeTypedArgument argument = attributeData.ConstructorArguments.First(); string value = argument.Value as string; return value; } break; } // If we have no description attribute, just return the ToString of the enum return requestedName; } } }