|
|
@@ -9,7 +9,6 @@ using System.Linq.Expressions;
|
|
|
using System.Reflection;
|
|
|
using System.Resources;
|
|
|
using System.Text;
|
|
|
-using Masuit.Tools.Systems;
|
|
|
|
|
|
namespace Masuit.Tools.Reflection
|
|
|
{
|
|
|
@@ -285,6 +284,36 @@ namespace Masuit.Tools.Reflection
|
|
|
return Encoding.GetEncoding(charset).GetString(bytes);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 判断指定的类型 <paramref name="type"/> 是否是指定泛型类型的子类型,或实现了指定泛型接口。
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="type">需要测试的类型。</param>
|
|
|
+ /// <param name="generic">泛型接口类型,传入 typeof(IXxx<>)</param>
|
|
|
+ /// <returns>如果是泛型接口的子类型,则返回 true,否则返回 false。</returns>
|
|
|
+ public static bool HasImplementedRawGeneric([NotNull] this Type type, [NotNull] Type generic)
|
|
|
+ {
|
|
|
+ if (type == null) throw new ArgumentNullException(nameof(type));
|
|
|
+ if (generic == null) throw new ArgumentNullException(nameof(generic));
|
|
|
+
|
|
|
+ // 测试接口。
|
|
|
+ var isTheRawGenericType = type.GetInterfaces().Any(IsTheRawGenericType);
|
|
|
+ if (isTheRawGenericType) return true;
|
|
|
+
|
|
|
+ // 测试类型。
|
|
|
+ while (type != null && type != typeof(object))
|
|
|
+ {
|
|
|
+ isTheRawGenericType = IsTheRawGenericType(type);
|
|
|
+ if (isTheRawGenericType) return true;
|
|
|
+ type = type.BaseType;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 没有找到任何匹配的接口或类型。
|
|
|
+ return false;
|
|
|
+
|
|
|
+ // 测试某个类型是否是指定的原始接口。
|
|
|
+ bool IsTheRawGenericType(Type test) => generic == (test.IsGenericType ? test.GetGenericTypeDefinition() : test);
|
|
|
+ }
|
|
|
+
|
|
|
#endregion 资源获取
|
|
|
|
|
|
#region 创建实例
|