Type扩展类

1

复制代码
    /// <summary>
    /// Type 拓展
    /// </summary>
    public static class TypeExtensions
    {
        /// <summary>
        /// 确定当前实例是否是继承或者实现某个Type
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static bool IsInheritOfType(this Type self, Type type)
        {
            if (type.IsInterface)
                return self.GetInterface(type.Name) != null;
            if (type.IsEnum)
                return self.GetEnumUnderlyingType() == type;
            return self.IsSubclassOf(type);
            //return type.IsAssignableFrom(self);
        }
    }
复制代码

 

复制代码
    public static class TypeExtension
    {
        /// <summary>
        /// 支持判断祖先基类以及泛型基类
        /// </summary>
        /// <param name="type"></param>
        /// <param name="baseType"></param>
        /// <returns></returns>
        public static bool IsSubclassOfEx(this Type type, Type baseType)
        {
            Type current = null;
            while (type != null && type != typeof(object))
            {
                current = type.IsGenericType ? type.GetGenericTypeDefinition() : type;
                if (baseType == current)
                {
                    return true;
                }
                type = type.BaseType;
            }
            return false;
        }
    }
复制代码

测试:

复制代码
    public class Person { }
    public class Person<T> : Person { }
    public class Man : Person<int> { }

public static void Main(string[] args)
        {
            bool a1 = typeof(Man).IsSubclassOf(typeof(Person));//true
            bool a2 = typeof(Man).IsSubclassOf(typeof(Person<>));//false
            bool a4 = typeof(Man).IsSubclassOf(typeof(Man));//false

            bool b1 = typeof(Man).IsSubclassOfEx(typeof(Person));//true
            bool b2 = typeof(Man).IsSubclassOfEx(typeof(Person<>));//true
            bool b4 = typeof(Man).IsSubclassOfEx(typeof(Man));//true

        }
复制代码

 

posted @   .Neterr  阅读(161)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示