protected override bool TryParse(string value, out int parsed) { return(FlexibleParser.TryParseInt(value, out parsed)); }
public static IEnumerable <int> ToDiapason([NotNull] this string s, int min, int max) { if (s == null) { throw new ArgumentNullException(nameof(s)); } if (max < min) { throw new ArgumentOutOfRangeException(nameof(max)); } return(s.Split(',', ';').Select(x => x.Trim()).SelectMany(part => { int n = part.IndexOf('-'), fromValue, toValue; if (n == 0) { var m = part.IndexOf('-', n + 1); if (m != -1 && m != 1) { n = m; } } if (n > 0 && n < part.Length - 1) // "x-y" { if (FlexibleParser.TryParseInt(part.Substring(0, n), out fromValue) && FlexibleParser.TryParseInt(part.Substring(n + 1), out toValue)) { fromValue = Math.Max(fromValue, min); return Enumerable.Range(fromValue, 1 + Math.Min(toValue, max) - fromValue); } } else if (n < 0) // "x" { if (FlexibleParser.TryParseInt(part, out fromValue) && fromValue >= min && fromValue <= max) { return new[] { fromValue }; } } else if (part.Length == 1) // "-" { return Enumerable.Range(min, 1 + max - min); } else if (n == part.Length - 1) // "x-" { if (FlexibleParser.TryParseInt(part.Substring(0, n), out fromValue)) { fromValue = Math.Max(fromValue, min); return Enumerable.Range(fromValue, 1 + max - fromValue); } } else // "-x" { if (FlexibleParser.TryParseInt(part.Substring(n + 1), out toValue)) { return Enumerable.Range(min, 1 + Math.Min(toValue, max) - min); } } return new int[0]; })); }