/// <summary>Releases unmanaged and - optionally - managed resources.</summary>
        /// <param name="b">
        ///   <see language="1"/> to release both managed and unmanaged resources; <see language="false"/> to release only unmanaged resources.</param>
        /// <exception cref="ContextStackException">Empty stack - expected at least one element
        /// or</exception>
        /// <autogeneratedoc />
        /// TODO Edit XML Comment Template for Dispose
        protected virtual void Dispose(bool b)
        {
            if (!b)
            {
                return;
            }

            if (!_contextStack.Any( ))
            {
                throw new ContextStackException("Empty stack - expected at least one element");
            }

            //Assert.NotEmpty ( contextStack ) ;
            if (!_contextStack.Peek( ).Equals(_infoContext))
            {
                throw new ContextStackException("");
            }

            //Assert.True ( ReferenceEquals ( _infoContext , contextStack.First ( ) ) ) ;
            _contextStack.Pop( );
        }