Determine if object derives from collection type

前端 未结 11 2059
时光说笑
时光说笑 2021-02-05 04:53

I want to determine if a generic object type (\"T\") method type parameter is a collection type. I would typically be sending T through as a Generic.List but it could be any co

11条回答
  •  余生分开走
    2021-02-05 05:49

    For simplicity and code sharing, I usually use this extension method:

    public static bool IsGenericList(this object obj)
    {
        return IsGenericList(obj.GetType());
    }
    
    public static bool IsGenericList(this Type type)
    {
        if (type == null)
        {
            throw new ArgumentNullException("type");
        }
    
        foreach (Type @interface in type.GetInterfaces())
        {
            if (@interface.IsGenericType)
            {
                if (@interface.GetGenericTypeDefinition() == typeof(ICollection<>))
                {
                    // if needed, you can also return the type used as generic argument
                    return true;
                }
            }
        }
    
        return (type.GetInterface("IEnumerable") != null);
    }
    

提交回复
热议问题