EnumExtension.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. namespace PlcSiemens.Core.Extension
  2. {
  3. /// <summary>枚举类型助手类</summary>
  4. public static class EnumHelper
  5. {
  6. /// <summary>枚举变量是否包含指定标识</summary>
  7. public static bool Has(this Enum value, Enum flag)
  8. {
  9. if (value.GetType() != flag.GetType()) throw new ArgumentException("flag", "枚举标识判断必须是相同的类型!");
  10. ulong num = Convert.ToUInt64(flag);
  11. return (Convert.ToUInt64(value) & num) == num;
  12. }
  13. /// <summary>设置标识位</summary>
  14. public static T Set<T>(this Enum source, T flag, bool value)
  15. {
  16. if (!(source is T)) throw new ArgumentException("source", "枚举标识判断必须是相同的类型!");
  17. ulong s = Convert.ToUInt64(source);
  18. ulong f = Convert.ToUInt64(flag);
  19. if (value)
  20. {
  21. s |= f;
  22. }
  23. else
  24. {
  25. s &= ~f;
  26. }
  27. return (T)Enum.ToObject(typeof(T), s);
  28. }
  29. /// <summary>获取枚举字段的注释</summary>
  30. //public static string GetDescription(this Enum value)
  31. //{
  32. // var type = value.GetType();
  33. // var item = type.GetField(value.ToString(), BindingFlags.Public | BindingFlags.Static);
  34. // var att = item.GetCustomAttribute<DescriptionAttribute>(false);
  35. // if (att != null && !string.IsNullOrEmpty(att.Description)) return att.Description;
  36. // return null;
  37. //}
  38. ///// <summary>获取枚举类型的所有字段注释</summary>
  39. //public static Dictionary<TEnum, string> GetDescriptions<TEnum>()
  40. //{
  41. // var dic = new Dictionary<TEnum, string>();
  42. // foreach (var item in GetDescriptions(typeof(TEnum)))
  43. // {
  44. // dic.Add((TEnum)(object)item.Key, item.Value);
  45. // }
  46. // return dic;
  47. //}
  48. ///// <summary>获取枚举类型的所有字段注释</summary>
  49. //public static Dictionary<int, string> GetDescriptions(Type enumType)
  50. //{
  51. // var dic = new Dictionary<int, string>();
  52. // foreach (var item in enumType.GetFields(BindingFlags.Public | BindingFlags.Static))
  53. // {
  54. // if (!item.IsStatic) continue;
  55. // // 这里的快速访问方法会报错
  56. // //FieldInfoX fix = FieldInfoX.Create(item);
  57. // //PermissionFlags value = (PermissionFlags)fix.GetValue(null);
  58. // int value = Convert.ToInt32(item.GetValue(null));
  59. // string des = item.Name;
  60. // //var dna = AttributeX.GetCustomAttribute<DisplayNameAttribute>(item, false);
  61. // var dna = item.GetCustomAttribute<DisplayNameAttribute>(false);
  62. // if (dna != null && !string.IsNullOrEmpty(dna.DisplayName)) des = dna.DisplayName;
  63. // //var att = AttributeX.GetCustomAttribute<DescriptionAttribute>(item, false);
  64. // var att = item.GetCustomAttribute<DescriptionAttribute>(false);
  65. // if (att != null && !string.IsNullOrEmpty(att.Description)) des = att.Description;
  66. // //dic.Add(value, des);
  67. // // 有些枚举可能不同名称有相同的值
  68. // dic[value] = des;
  69. // }
  70. // return dic;
  71. //}
  72. }
  73. }