EnumExt.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using AspectCore.Extensions.Reflection;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Linq;
  6. using System.Reflection;
  7. namespace wms.util.Ext
  8. {
  9. public static class EnumExt
  10. {
  11. public static string GetDescription(this Enum obj)
  12. {
  13. var fi = obj.GetType().GetField(obj.ToString());
  14. var arrDesc = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
  15. return arrDesc[0]?.Description;
  16. }
  17. public static string GetDescription<T>(this Enum obj)
  18. {
  19. var refactor = typeof(T).GetField(obj.ToString()).GetReflector();
  20. var arrDesc = refactor.GetCustomAttributes(typeof(DescriptionAttribute));
  21. return ((DescriptionAttribute)arrDesc[0]).Description;
  22. }
  23. public static T ToEnum<T>(this string obj)
  24. {
  25. return (T)Enum.Parse(typeof(T), obj);
  26. }
  27. public static string GetDescription<T>(string obj)
  28. {
  29. var refactor = typeof(T).GetField(obj).GetReflector();
  30. var arrDesc = refactor.GetCustomAttributes(typeof(DescriptionAttribute));
  31. return ((DescriptionAttribute)arrDesc[0]).Description;
  32. }
  33. public static Dictionary<int, string> ToDict(this Enum obj)
  34. {
  35. var enumDict = new Dictionary<int, string>();
  36. foreach (int enumValue in Enum.GetValues(obj.GetType()))
  37. {
  38. enumDict.Add(enumValue, enumValue.ToString());
  39. }
  40. return enumDict;
  41. }
  42. public static List<string> ToList<T>()
  43. {
  44. //Type t = typeof(T);
  45. //var ty = t.GetFields(BindingFlags.Public | BindingFlags.Static)
  46. //.Where(p => t.IsAssignableFrom(p.FieldType))
  47. //.Select(pi => (T)pi.GetValue(null))
  48. //.ToList();
  49. return Enum.GetValues(typeof(T)).Cast<T>().Select(x => x.ToString()).ToList();
  50. }
  51. public static List<KeyValuePair<int, string>> ToKVList<T>()
  52. {
  53. var keys = new List<KeyValuePair<int, string>>();
  54. foreach (var e in Enum.GetValues(typeof(T)))
  55. {
  56. object[] objArr = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);
  57. DescriptionAttribute da = objArr?[0] as DescriptionAttribute;
  58. keys.Add(new KeyValuePair<int, string>(Convert.ToInt32(e), da.Description));
  59. }
  60. return keys;
  61. }
  62. public static List<KeyValuePair<int, string>> ToKVListLinq<T>()
  63. {
  64. Type t = typeof(T);
  65. return t.GetFields(BindingFlags.Public | BindingFlags.Static)
  66. .Where(p => t.IsAssignableFrom(p.FieldType))
  67. .Select(a => new KeyValuePair<int, string>(Convert.ToInt32(a.GetValue(null)),
  68. (a.GetCustomAttributes(typeof(DescriptionAttribute), true)?[0] as DescriptionAttribute).Description)
  69. ).ToList();
  70. }
  71. }
  72. }