/// <summary>
        /// Processes each char in the Bonus string,
        /// and adds those values to the corresponding Throws (to the Last Frame)
        /// </summary>
        /// <param name="bonusString"></param>
        /// <param name="lastFrame"></param>
        /// <param name="startingPinsNumber"></param>
        internal void ProcessBonusStringToLastFrame(string bonusString, Frame lastFrame, int startingPinsNumber)
        {
            if (!lastFrame.IsFinalFrame)
            {
                throw new ArgumentException("It seems that you're trying to process Bonus while not on the Last Frame. Please check.");
            }

            char[]             bonusCharArr    = bonusString.ToCharArray();
            ThrowCharProcessor _throwProcessor = new ThrowCharProcessor();

            if (lastFrame.IsStrike)
            {
                if (bonusCharArr.Length > 2)
                {
                    throw new ArgumentException($"The number of bonus throws {bonusCharArr.Length}, is over allowed for the Last Strike. Please check.");
                }

                foreach (char c in bonusCharArr)
                {
                    _throwProcessor.ConvertCharIntoDigitalValueForThrow(c, lastFrame, startingPinsNumber);
                }
            }
            else if (lastFrame.IsSpare)
            {
                if (bonusCharArr.Length != 1)
                {
                    throw new ArgumentException($"The number of bonus throws {bonusCharArr.Length}, is over allowed for the Last Spare. Please check.");
                }

                _throwProcessor.ConvertCharIntoDigitalValueForThrow(bonusCharArr[0], lastFrame, startingPinsNumber);
            }
        }
        /// <summary>
        /// Processes each frame-string in the frames string-array, to determine the pins count for each frame
        /// and adds those values to the corresponding Frame (in the Frames List)
        /// </summary>
        /// <param name="frame"></param>
        /// <param name="framesList"></param>
        /// <param name="maxFramesNumber"></param>
        /// <param name="startingPinsNumber"></param>
        internal void ProcessFrameStringIntoFrameProperties(string frame, List <Frame> framesList, int maxFramesNumber, int startingPinsNumber)
        {
            char[] frameCharArr = frame.ToCharArray();
            foreach (char c in frameCharArr)
            {
                ThrowCharProcessor _throwProcessor = new ThrowCharProcessor();
                _throwProcessor.ConvertCharIntoDigitalValueForThrow(c, framesList.Last(), startingPinsNumber);
                _throwProcessor.SetThrowTypeBasedOnThrowChar(c, framesList.Last());
                _throwProcessor.SetFrameClosedFlagBasedOnThrowChar(c, framesList.Last());
                SetIsOverFlagForTheFrame(framesList.Last());
                SetIsFinalFlagForTheFrame(framesList, maxFramesNumber);
                CalculateKnockedDownPins(framesList.Last(), startingPinsNumber);
            }

            ValidateFrame(framesList.Last());
        }