public static string?TryParse(string valueDefinition, out NumberInterval?interval)
        {
            interval = null;
            var m = Regex.Match(valueDefinition, @"^\s*(?<def>.+)\s*(\[(?<min>.+)?\s*,\s*(?<max>.+)?\s*\])?\s*$");

            if (!m.Success)
            {
                return("Invalid number interval, [min?, max?]");
            }

            interval = new NumberInterval();

            if (!ReflectionTools.TryParse(m.Groups["def"].Value, CultureInfo.InvariantCulture, out interval !.DefaultValue))
            {
                return("Invalid default value");
            }

            if (!ReflectionTools.TryParse(m.Groups["min"].Value, CultureInfo.InvariantCulture, out interval.MinValue))
            {
                return("Invalid min value");
            }

            if (!ReflectionTools.TryParse(m.Groups["max"].Value, CultureInfo.InvariantCulture, out interval.MaxValue))
            {
                return("Invalid max value");
            }

            return(null);
        }
Beispiel #2
0
        public NumberInterval GetNumberInterval()
        {
            if (Type != ChartParameterType.Number)
            {
                throw new InvalidOperationException("Type is not Number");
            }

            if (numberInterval != null)
            {
                return(numberInterval);
            }

            lock (this)
            {
                if (numberInterval != null)
                {
                    return(numberInterval);
                }

                string error = NumberInterval.TryParse(valueDefinition, out numberInterval);
                if (error.HasText())
                {
                    throw new FormatException(error);
                }
            }

            return(numberInterval);
        }
Beispiel #3
0
        protected override string PropertyValidation(PropertyInfo pi)
        {
            if (pi.Name == nameof(ValueDefinition) && ValueDefinition != null)
            {
                switch (Type)
                {
                case ChartParameterType.Enum: return(EnumValueList.TryParse(valueDefinition, out enumValues));

                case ChartParameterType.Number: return(NumberInterval.TryParse(valueDefinition, out numberInterval));

                case ChartParameterType.String: return(null);

                default: throw new InvalidOperationException();
                }
            }

            return(base.PropertyValidation(pi));
        }