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); }
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); }
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)); }