using System; using System.Linq; namespace SabreTools.Core.Tools { public static class AttributeHelper { /// /// Get the MappingAttribute from a supported value /// /// Value to use /// MappingAttribute attached to the value public static MappingAttribute? GetAttribute(T? value) { // Null value in, null value out if (value == null) return null; // Current enumeration type var enumType = typeof(T); if (Nullable.GetUnderlyingType(enumType) != null) enumType = Nullable.GetUnderlyingType(enumType); // If the value returns a null on ToString, just return null string? valueStr = value.ToString(); if (string.IsNullOrEmpty(valueStr)) return null; // Get the member info array var memberInfos = enumType?.GetMember(valueStr); if (memberInfos == null) return null; // Get the enum value info from the array, if possible var enumValueMemberInfo = memberInfos.FirstOrDefault(m => m.DeclaringType == enumType); if (enumValueMemberInfo == null) return null; // Try to get the relevant attribute var attributes = enumValueMemberInfo.GetCustomAttributes(typeof(MappingAttribute), true); if (attributes == null) return null; // Return the first attribute, if possible return (MappingAttribute?)attributes.FirstOrDefault(); } } }