private static string GetEnumDescription(Enum value)
{
if (value == null) return null;
var type = value.GetType().GetTypeInfo();
var res = value.ToString();
if (type.CustomAttributes.Any(t => t.AttributeType == typeof(FlagsAttribute)))
{
var members = type.AsType().GetMembers();
var conversion = members.SelectMany(t => t.GetCustomAttributes(typeof(DescriptionAttribute), false).Select(a => new KeyValuePair<string, string>(t.Name, ((DescriptionAttribute)a).Description))).ToDictionary(t => t.Key, t => t.Value);
res = string.Join(",", res.Split(',').Select(t => t.Trim()).Select(t => conversion.ContainsKey(t) ? conversion[t] : t));
}
else
{
var memInfo = type.AsType().GetMember(value.ToString());
if (memInfo.Length > 0)
{
var attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false).ToList();
if (attrs.Any())
res = ((DescriptionAttribute)attrs.First()).Description;
}
}
return res;
}