C# 通过使用反射只识别像数据类型这样的集合

C# identify only collection like datatypes by using reflection

我正在使用 C# .Net 4.7.2

我想用反射来分析一个类型。分析的一部分是识别任何类型集合的属性。比如Collection、List、Array、IEnumerable等

我认为这很容易并搜索了实现 IEnumerable 的类型。 嗯,好像没那么容易。例如,String 也实现了 IEnumrable,但它不是集合类型。

还有什么我可以用来断言 属性 是某种集合吗?

澄清 集合类型是指任何可以存储或管理多个成员的类型(memberitems 的确切数量无关紧要)。也可以称其为容器类型。例如。集合、列表、数组、字典...

然而,IEnumarable 并不是将集合类型与非集合类型分开的好标准。例如,String 实现了 IEnumerable,因为它提供了一个 char 数组。但是 String 不是集合类型。

我担心的是,以错误的方式对待像 String 这样的类型——作为一个集合。 如果是字符串,我最终会读取 char 数组,但我真的很想读取字符串本身。

如果是真正的集合类型,例如List<int>我确实想阅读每个成员。在此示例中,每个整数值。

无需修改数值!

您必须检查 IList 和 IDictonary 而不是 IEnumerable 这是示例,来自我的框架:

    public static bool IsContainerType( Type type )
    {
        TypeInfo typeInfo = type.GetTypeInfo();

        if ( typeInfo.IsArray == true )
            return true;

        if ( typeof( System.Collections.IList ).IsAssignableFrom( type ) == true )
            return true;

        if ( typeof( System.Collections.IDictionary ).IsAssignableFrom( type ) == true )
            return true;

        return false;
    }