Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }