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);
 }