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;
}
我正在使用 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;
}