Advertisement
Guest User

Untitled

a guest
Apr 24th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.70 KB | None | 0 0
  1. // <summary>
  2. ///     Значение <see cref="Enum" />.
  3. /// </summary>
  4. public class EnumValue
  5. {
  6.     /// <summary>
  7.     ///     Конструирует значение <see cref="Enum" />.
  8.     /// </summary>
  9.     /// <param name="id">Числовое представление значения.</param>
  10.     /// <param name="value">Строковое представление значения.</param>
  11.     /// <param name="name">Отображаемое наименование.</param>
  12.     public EnumValue(long id, string value, string name)
  13.     {
  14.         Id = id;
  15.         Value = value;
  16.         Name = name;
  17.     }
  18.  
  19.     /// <summary>
  20.     ///     Числовое представление значения.
  21.     /// </summary>
  22.     public long Id { get; }
  23.  
  24.     /// <summary>
  25.     ///     Строковое представление значения.
  26.     /// </summary>
  27.     public string Value { get; }
  28.  
  29.     /// <summary>
  30.     ///     Отображаемое наименование.
  31.     /// </summary>
  32.     public string Name { get; }
  33. }
  34.  
  35. /// <summary>
  36. ///     Сервис, предоставляющий значения <see cref="Enum" />.
  37. /// </summary>
  38. public class EnumValueProvider
  39. {
  40.     /// <summary>
  41.     ///     Возвращает все возможные значения для перечисления указанного типа.
  42.     /// </summary>
  43.     /// <typeparam name="TEnum">Тип перечисления.</typeparam>
  44.     /// <returns></returns>
  45.     public EnumValue[] GetValues<TEnum>()
  46.         where TEnum : struct, IFormattable, IComparable, IConvertible
  47.     {
  48.         var enumType = typeof(TEnum);
  49.         if (!enumType.IsEnum)
  50.             throw new Exception("Указан недопустимый тип для данной операции.");
  51.         var result = new List<EnumValue>();
  52.         var enumValues = Enum.GetValues(enumType).Cast<TEnum>().ToArray();
  53.         foreach (var enumValue in enumValues)
  54.         {
  55.             var id = Convert.ToInt64(enumValue);
  56.             var value = Enum.GetName(enumType, enumValue);
  57.             var member = enumType
  58.                 .GetMember(
  59.                     enumValue.ToString(CultureInfo.InvariantCulture),
  60.                     BindingFlags.Public | BindingFlags.Static)
  61.                 ?.FirstOrDefault();
  62.             var name = value;
  63.             if (member != null)
  64.             {
  65.                 var memberAttributes = member.GetCustomAttributes();
  66.                 foreach (var memberAttribute in memberAttributes)
  67.                     if (memberAttribute is DisplayAttribute displayAttribute)
  68.                         if (!string.IsNullOrEmpty(displayAttribute.Name))
  69.                         {
  70.                             name = displayAttribute.Name;
  71.                             break;
  72.                         }
  73.             }
  74.  
  75.             result.Add(new EnumValue(id, value, name));
  76.         }
  77.  
  78.         var resultArray = result.OrderBy(x => x.Id).ToArray();
  79.         return resultArray;
  80.     }
  81.  
  82.     /// <summary>
  83.     ///     Возвращает значение для перечисления указанного типа.
  84.     /// </summary>
  85.     /// <typeparam name="TEnum">Тип перечисления.</typeparam>
  86.     /// <param name="enumValue">Значение перечисления.</param>
  87.     /// <returns></returns>
  88.     public EnumValue GetValue<TEnum>(TEnum enumValue)
  89.         where TEnum : struct, IFormattable, IComparable, IConvertible
  90.     {
  91.         var enumType = typeof(TEnum);
  92.         if (!enumType.IsEnum)
  93.             throw new Exception("Указан недопустимый тип для данной операции.");
  94.         if (!Enum.IsDefined(enumType, enumValue))
  95.             throw new Exception("Указанное значение не входит в диапазон перечисления");
  96.         var id = Convert.ToInt64(enumValue);
  97.         var value = Enum.GetName(enumType, enumValue);
  98.         var member = enumType
  99.             .GetMember(
  100.                 enumValue.ToString(CultureInfo.InvariantCulture),
  101.                 BindingFlags.Public | BindingFlags.Static)
  102.             ?.FirstOrDefault();
  103.         var name = value;
  104.         if (member != null)
  105.         {
  106.             var memberAttributes = member.GetCustomAttributes();
  107.             foreach (var memberAttribute in memberAttributes)
  108.                 if (memberAttribute is DisplayAttribute displayAttribute)
  109.                     if (!string.IsNullOrEmpty(displayAttribute.Name))
  110.                     {
  111.                         name = displayAttribute.Name;
  112.                         break;
  113.                     }
  114.         }
  115.  
  116.         var result = new EnumValue(id, value, name);
  117.         return result;
  118.     }
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement