Пример #1
0
        public static Type GetIEnumerableElementType(Type type)
        {
            Type type1 = TypeSystem.FindIEnumerable(type);

            if (type1 != null)
            {
                return(type1.GetGenericArguments()[0]);
            }
            else
            {
                return(null);
            }
        }
Пример #2
0
        private static Type FindIEnumerable(Type seqType)
        {
            Type type;

            if (seqType == null || seqType == typeof(string))
            {
                return(null);
            }
            else
            {
                if (!seqType.IsArray)
                {
                    if (seqType.IsGenericType)
                    {
                        Type[] genericArguments = seqType.GetGenericArguments();
                        int    num = 0;
                        while (num < (int)genericArguments.Length)
                        {
                            Type   type1     = genericArguments[num];
                            Type[] typeArray = new Type[1];
                            typeArray[0] = type1;
                            Type type2 = typeof(IEnumerable <>).MakeGenericType(typeArray);
                            if (!type2.IsAssignableFrom(seqType))
                            {
                                num++;
                            }
                            else
                            {
                                type = type2;
                                return(type);
                            }
                        }
                    }
                    Type[] interfaces = seqType.GetInterfaces();
                    if (interfaces != null && (int)interfaces.Length > 0)
                    {
                        Type[] typeArray1 = interfaces;
                        int    num1       = 0;
                        while (num1 < (int)typeArray1.Length)
                        {
                            Type type3 = typeArray1[num1];
                            Type type4 = TypeSystem.FindIEnumerable(type3);
                            if (type4 == null)
                            {
                                num1++;
                            }
                            else
                            {
                                type = type4;
                                return(type);
                            }
                        }
                    }
                    if (!(seqType.BaseType != null) || !(seqType.BaseType != typeof(object)))
                    {
                        return(null);
                    }
                    else
                    {
                        return(TypeSystem.FindIEnumerable(seqType.BaseType));
                    }
                }
                else
                {
                    Type[] elementType = new Type[1];
                    elementType[0] = seqType.GetElementType();
                    return(typeof(IEnumerable <>).MakeGenericType(elementType));
                }
            }
        }