예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
 protected virtual void OnAddOccured(EventArgs e)
 {
     CalledCount = CalledCount + 1;
     AddOccured?.Invoke(this, e);
 }