Example #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);
        }
Example #2
0
        public static object GetDefault(Type type)
        {
            object result;

            if (type.IsValueType && !AiTypeHelper.IsNullableType(type))
            {
                result = Activator.CreateInstance(type);
            }
            else
            {
                result = null;
            }
            return(result);
        }
Example #3
0
        public static Type GetNonNullableType(Type type)
        {
            Type result;

            if (AiTypeHelper.IsNullableType(type))
            {
                result = type.GetGenericArguments()[0];
            }
            else
            {
                result = type;
            }
            return(result);
        }
Example #4
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);
        }
Example #5
0
        public static Type GetNullAssignableType(Type type)
        {
            Type result;

            if (!AiTypeHelper.IsNullAssignable(type))
            {
                result = typeof(Nullable <>).MakeGenericType(new Type[]
                {
                    type
                });
            }
            else
            {
                result = type;
            }
            return(result);
        }
Example #6
0
        public static bool IsInteger(Type type)
        {
            Type nonNullableType = AiTypeHelper.GetNonNullableType(type);
            bool result;

            switch (Type.GetTypeCode(type))
            {
            case TypeCode.SByte:
            case TypeCode.Byte:
            case TypeCode.Int16:
            case TypeCode.UInt16:
            case TypeCode.Int32:
            case TypeCode.UInt32:
            case TypeCode.Int64:
            case TypeCode.UInt64:
                result = true;
                break;

            default:
                result = false;
                break;
            }
            return(result);
        }
Example #7
0
 public static bool IsNullAssignable(Type type)
 {
     return(!type.IsValueType || AiTypeHelper.IsNullableType(type));
 }
Example #8
0
 public static ConstantExpression GetNullConstant(Type type)
 {
     return(Expression.Constant(null, AiTypeHelper.GetNullAssignableType(type)));
 }