TypeDefineExtensions.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace XF.Domain.Extensions
  7. {
  8. public static class TypeDefineExtensions
  9. {
  10. /// <summary>
  11. /// 判断类型是否实现某个泛型
  12. /// </summary>
  13. /// <param name="type">类型</param>
  14. /// <param name="generic">泛型类型</param>
  15. /// <returns>bool</returns>
  16. public static bool HasImplementedOf(this Type type, Type generic)
  17. {
  18. // 检查接口类型
  19. var isTheRawGenericType = type.GetInterfaces().Any(IsTheRawGenericType);
  20. if (isTheRawGenericType) return true;
  21. // 检查类型
  22. while (type != null && type != typeof(object))
  23. {
  24. isTheRawGenericType = IsTheRawGenericType(type);
  25. if (isTheRawGenericType) return true;
  26. type = type.BaseType;
  27. }
  28. return false;
  29. // 判断逻辑
  30. bool IsTheRawGenericType(Type type) => generic == (type.IsGenericType ? type.GetGenericTypeDefinition() : type);
  31. }
  32. }
  33. }