Ejemplo n.º 1
0
        private TypeDefBase BuildType(Type propertyType)
        {
            TypeDefBase typeDefBase;

            var underlyingType = Nullable.GetUnderlyingType(propertyType);

            if (underlyingType != null)
            {
                NullableTypeDef valueTypeDef = new NullableTypeDef(propertyType, (ValueTypeDef)GetType(underlyingType));
                _types.Add(propertyType, valueTypeDef);
                typeDefBase = valueTypeDef;
            }
            else if (propertyType.IsGenericType &&
                     (propertyType.GetGenericTypeDefinition() == typeof(List <>) ||
                      propertyType.GetGenericTypeDefinition() == typeof(IList <>) ||
                      propertyType.GetGenericTypeDefinition() == typeof(IEnumerable <>)))
            {
                typeDefBase = new ListTypeDef(propertyType, propertyType.GenericTypeArguments[0]);
            }
            else if (propertyType == typeof(string))
            {
                ValueTypeDef valueTypeDef = new ValueTypeDef(propertyType);
                _types.Add(propertyType, valueTypeDef);
                typeDefBase = valueTypeDef;
            }
            else if (propertyType.IsClass || propertyType.IsInterface)
            {
                RefTypeDef refTypeDef = new RefTypeDef(propertyType);
                _types.Add(propertyType, refTypeDef);

                typeDefBase = refTypeDef;
                foreach (var propertyInfo in propertyType.GetProperties().Where(x => !new[] { "Equality" }.Any(y => x.PropertyType.Name.Contains(y))))
                {
                    refTypeDef.Props.Add(new Prop(propertyInfo, propertyInfo.Name, GetType(propertyInfo.PropertyType)));
                }
            }
            else if (propertyType.IsValueType)
            {
                ValueTypeDef valueTypeDef = new ValueTypeDef(propertyType);
                _types.Add(propertyType, valueTypeDef);
                typeDefBase = valueTypeDef;
            }
            else
            {
                throw new Exception();
            }


            return(typeDefBase);
        }
Ejemplo n.º 2
0
 public NullableTypeDef(Type type, ValueTypeDef underlyingTypeDef) : base(type)
 {
     UnderlyingTypeDef = underlyingTypeDef;
     Name = underlyingTypeDef.Name + "?";
 }