using System;
using System.Linq;
namespace EntrustSettle.Common.Extensions
{
public static class GenericTypeExtensions
{
public static string GetGenericTypeName(this Type type)
{
var typeName = string.Empty;
if (type.IsGenericType)
{
var genericTypes = string.Join(",", type.GetGenericArguments().Select(t => t.Name).ToArray());
typeName = $"{type.Name.Remove(type.Name.IndexOf('`'))}<{genericTypes}>";
}
else
{
typeName = type.Name;
}
return typeName;
}
public static string GetGenericTypeName(this object @object)
{
return @object.GetType().GetGenericTypeName();
}
///
/// 判断类型是否实现某个泛型
///
/// 类型
/// 泛型类型
/// bool
// public static bool HasImplementedRawGeneric(this Type type, Type 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 type) => generic == (type.IsGenericType ? type.GetGenericTypeDefinition() : type);
// }
}
}