public static Property Create(Type valueType, object name, object defaultValue) { // TODO: find some way to do this better, using attributes+reflection or something, yes? if (valueType == typeof(bool)) { return(new BooleanProperty(name, (bool)(defaultValue ?? (object)false))); } else if (valueType == typeof(double)) { return(new DoubleProperty(name, (double)(defaultValue ?? (object)0.0))); } else if (valueType == typeof(Pair <double, double>)) { return(new DoubleVectorProperty(name, (Pair <double, double>)(defaultValue ?? (object)PairUtils.Create(0.0, 0.0)))); } else if (valueType == typeof(int)) { return(new Int32Property(name, (int)(defaultValue ?? (object)0))); } else if (valueType == typeof(string)) { return(new StringProperty(name, (string)defaultValue)); } else if (typeof(ImageResource).IsAssignableFrom(valueType)) { return(new ImageProperty(name, (ImageResource)defaultValue)); } else if (valueType.IsEnum) { return(StaticListChoiceProperty.CreateForEnum( valueType, name, defaultValue ?? ((object[])Enum.GetValues(valueType))[0], false)); } throw new ArgumentException(string.Format("Not a valid type: {0}", valueType.FullName)); }