internal static Type GetElementType(Type seqType) { Type ienumerable = TypeSystem.FindIEnumerable(seqType); if (ienumerable == (Type)null) { return(seqType); } return(ienumerable.GetGenericArguments()[0]); }
private static Type FindIEnumerable(Type seqType) { if (seqType == (Type)null || seqType == typeof(string) || seqType == typeof(byte[])) { return((Type)null); } if (seqType.IsArray) { return(typeof(IEnumerable <>).MakeGenericType(seqType.GetElementType())); } if (seqType.IsGenericType()) { foreach (Type genericArgument in seqType.GetGenericArguments()) { Type type = typeof(IEnumerable <>).MakeGenericType(genericArgument); if (type.IsAssignableFrom(seqType)) { return(type); } } } Type[] interfaces = seqType.GetInterfaces(); if (interfaces != null && interfaces.Length > 0) { foreach (Type seqType1 in interfaces) { Type ienumerable = TypeSystem.FindIEnumerable(seqType1); if (ienumerable != (Type)null) { return(ienumerable); } } } if (seqType.BaseType() != (Type)null && seqType.BaseType() != typeof(object)) { return(TypeSystem.FindIEnumerable(seqType.BaseType())); } return((Type)null); }
internal static bool IsSequenceType(Type seqType) { return(TypeSystem.FindIEnumerable(seqType) != (Type)null); }