/// <summary>
        /// 解释处理 MaskToken 内容并返回处理结果。
        /// </summary>
        /// <param name="token">要处理的 MaskToken 。</param>
        /// <returns>处理结果。</returns>
        /// <exception cref="ArgumentNullException"/>
        private string InterpretToken(MaskToken token)
        {
            if (token == null)
            {
                throw new ArgumentNullException(nameof(token));
            }

            IMaskTokenHandler targetHandler = null;

            foreach (IMaskTokenHandler handler in m_handlers)
            {
                if (handler.ExpectedTokenTypeId == token.TypeId)
                {
                    targetHandler = handler;
                    break;
                }
            }

            if (targetHandler == null)
            {
                // 没有找到对应的 MaskToken 处理器。
                return(token.Content);
            }
            else
            {
                return(targetHandler.Process(token));
            }
        }
        /// <summary>
        /// 解释位于 MaskToken 读取器中的掩码并返回解释结果。
        /// </summary>
        /// <returns>解释结果。</returns>
        public string Interpret()
        {
            // 写入日志信息。
            Log.Debug("Interpreting mask: \"{0}\".", BaseReader.Mask);

            StringBuilder builder = new StringBuilder();

            m_reader.SetOffset(OffsetPositions.Begin);

            while (!m_reader.EndOfMask)
            {
                MaskToken token = m_reader.Read();
                builder.Append(InterpretToken(token));
            }

            string result = builder.ToString();

            Log.Debug("Interpreting complete. Result = \"{0}\".", result);

            return(result);
        }