/// <summary>
        /// Advances to the next array element if any, and returns <see langword="true"/> if successful.
        /// </summary>
        /// <remarks>
        /// <para>
        /// It returns <see langword="false"/> if the <c>JReader</c> has reached the end of the array, or
        /// if the array was empty or null.
        /// </para>
        /// <para>
        /// If <c>Next</c> returns <see langword="true"/>, you can then use <see cref="JReader"/> methods
        /// such as <see cref="JReader.Bool"/> to read the element value. If you do not care about the
        /// value, simply calling <c>Next</c> again without calling a <c>JReader</c> method will discard
        /// the value.
        /// </para>
        /// <para>
        /// For more information about why <c>Next</c> requires a <c>ref</c> parameter, see
        /// <see cref="JReader"/>.
        /// </para>
        /// </remarks>
        /// <param name="reader">the original <see cref="JReader"/> (must be passed by reference)</param>
        /// <returns><see langword="true"/> if there is a next array element</returns>
        public bool Next(ref JReader reader)
        {
            if (!_defined)
            {
                return(false);
            }
            var hasNext = reader.ArrayNext(!_afterFirst);

            _afterFirst = true;
            return(hasNext);
        }