public static Type FindIEnumerable(Type seqType) { Type result; if (seqType == null || seqType == typeof(string)) { result = null; } else if (seqType.IsArray) { result = typeof(IEnumerable <>).MakeGenericType(new Type[] { seqType.GetElementType() }); } else { if (seqType.IsGenericType) { Type[] array = seqType.GetGenericArguments(); for (int i = 0; i < array.Length; i++) { Type type = array[i]; Type type2 = typeof(IEnumerable <>).MakeGenericType(new Type[] { type }); if (type2.IsAssignableFrom(seqType)) { result = type2; return(result); } } } Type[] interfaces = seqType.GetInterfaces(); if (interfaces != null && interfaces.Length > 0) { Type[] array = interfaces; for (int i = 0; i < array.Length; i++) { Type seqType2 = array[i]; Type type2 = AiTypeHelper.FindIEnumerable(seqType2); if (type2 != null) { result = type2; return(result); } } } if (seqType.BaseType != null && seqType.BaseType != typeof(object)) { result = AiTypeHelper.FindIEnumerable(seqType.BaseType); } else { result = null; } } return(result); }
public static Type GetElementType(Type seqType) { Type type = AiTypeHelper.FindIEnumerable(seqType); Type result; if (type == null) { result = seqType; } else { result = type.GetGenericArguments()[0]; } return(result); }