public static Type GetElementType(Type seqType) { Type ienumerable = AtkTypeHelper.FindIEnumerable(seqType); if (ienumerable == (Type)null) { return(seqType); } return(ienumerable.GetGenericArguments()[0]); }
public static Type FindIEnumerable(Type seqType) { if (seqType == (Type)null || seqType == typeof(string)) { 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 && (uint)interfaces.Length > 0U) { foreach (Type seqType1 in interfaces) { Type ienumerable = AtkTypeHelper.FindIEnumerable(seqType1); if (ienumerable != (Type)null) { return(ienumerable); } } } if (seqType.BaseType != (Type)null && seqType.BaseType != typeof(object)) { return(AtkTypeHelper.FindIEnumerable(seqType.BaseType)); } return((Type)null); }