EnumTools.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. public static class EnumTools
  3. {
  4. public static bool IsInEnum<TEnum>(string value, bool ignoreCase = false) where TEnum : struct, IConvertible
  5. {
  6. if (!ignoreCase)
  7. {
  8. return Enum.IsDefined(typeof(TEnum), value);
  9. }
  10. string[] names = Enum.GetNames(typeof(TEnum));
  11. for (int i = 0; i < names.Length; i++)
  12. {
  13. if (names[i].Equals(value, StringComparison.OrdinalIgnoreCase))
  14. {
  15. return true;
  16. }
  17. }
  18. return false;
  19. }
  20. public static bool TryParse<TEnum>(string value, out TEnum result) where TEnum : struct, IConvertible
  21. {
  22. return EnumTools.TryParse<TEnum>(value, false, out result);
  23. }
  24. public static bool TryParse<TEnum>(string value, bool ignoreCase, out TEnum result) where TEnum : struct
  25. {
  26. if (Enum.IsDefined(typeof(TEnum), value))
  27. {
  28. result = (TEnum)((object)Enum.Parse(typeof(TEnum), value, true));
  29. return true;
  30. }
  31. if (ignoreCase)
  32. {
  33. string[] names = Enum.GetNames(typeof(TEnum));
  34. for (int i = 0; i < names.Length; i++)
  35. {
  36. if (names[i].Equals(value, StringComparison.OrdinalIgnoreCase))
  37. {
  38. result = (TEnum)((object)Enum.Parse(typeof(TEnum), names[i]));
  39. return true;
  40. }
  41. }
  42. }
  43. result = default(TEnum);
  44. return false;
  45. }
  46. public static TEnum ToEnum<TEnum>(string value, bool ignoreCase = false) where TEnum : struct, IConvertible
  47. {
  48. TEnum result;
  49. EnumTools.TryParse<TEnum>(value, ignoreCase, out result);
  50. return result;
  51. }
  52. }