How to determine if a type is a type of collection?

前端 未结 3 1789
无人共我
无人共我 2021-02-03 17:50

I am trying to determine if a runtime type is some sort of collection type. What I have below works, but it seems strange that I have to name the types that I believe to be coll

3条回答
  •  深忆病人
    2021-02-03 18:30

    You can use this helper method to check if a type implements an open generic interface. In your case you can use DoesTypeSupportInterface(type, typeof(Collection<>))

    public static bool DoesTypeSupportInterface(Type type,Type inter)
    {
        if(inter.IsAssignableFrom(type))
            return true;
        if(type.GetInterfaces().Any(i=>i. IsGenericType && i.GetGenericTypeDefinition()==inter))
            return true;
        return false;
    }
    

    Or you can simply check for the non generic IEnumerable. All collection interfaces inherit from it. But I wouldn't call any type that implements IEnumerable a collection.

提交回复
热议问题