public int Add(string numbers) { if (string.IsNullOrEmpty(numbers)) { AddOccured?.Invoke(numbers, 0); return(0); } string[] delimiters = ExtractDelimiters(ref numbers); int sum = 0; var negativeNumbers = new List <int>(); var parsedNumbers = numbers.Split(delimiters, StringSplitOptions.None).Select(int.Parse); foreach (int number in parsedNumbers.Where(n => n <= 1000)) { if (number < 0) { negativeNumbers.Add(number); } sum += number; } if (negativeNumbers.Any()) { throw new Exception("negatives not allowed: " + string.Join(",", negativeNumbers)); } AddOccured?.Invoke(numbers, sum); return(sum); }
public int Add(string numbers) { var parser = new StringParser(numbers); var result = NumberFilterRules.Get .Aggregate(parser.Numbers, (numbers, rule) => rule.Apply(numbers)) .Sum(); AddOccured?.Invoke(numbers, result); CallCount++; return(result); }
protected virtual void OnAddOccured(EventArgs e) { CalledCount = CalledCount + 1; AddOccured?.Invoke(this, e); }