/// <summary>
 /// Add a mime param header.
 /// </summary>
 /// <param name="header">The header to add.</param>
 /// <returns>The newly added header.</returns>
 public MimeHeaderParam Add(MimeHeaderParam header)
 {
     if (_headers.Contains(header.Name)) {
         var err = new MimeException(string.Format(Messages.MimeHeaderParamCollection_Add_HeaderParamWithNameExists, header));
         logger.Error(err);
         throw err;
     }
     _listHeaders.Add(header);
     _headers.Add(header.Name, header);
     return header;
 }
        /// <summary>
        /// Add a mime param header at a specific position.
        /// </summary>
        /// <param name="index">the zero-based position to add.</param>
        /// <param name="header">The header to add.</param>
        /// <returns>The newly added header.</returns>
        public MimeHeaderParam AddAt(int index, MimeHeaderParam header)
        {
            if (_headers.Contains(header.Name)) {
                var err = new MimeException(string.Format(Messages.MimeHeaderParamCollection_Add_HeaderParamWithNameExists, header));
                logger.Error(err);
                throw err;
            }
            if (index < 0) {
                var err = new MimeException(string.Format(Messages.MimeHeaderParamCollection_AddAt_InvalidPositionForMiimeHeader, index));
                logger.Error(err);
                throw err;
            }
            if (index >= _listHeaders.Count)
            {
                return Add(header);
            }

            //Copy the last item
            _listHeaders.Add((MimeHeaderParam)_listHeaders[_listHeaders.Count - 1]);

            //Move other items
            if (_listHeaders.Count > 2 && index <= _listHeaders.Count - 2)
            {
                for(int i = _listHeaders.Count - 2; i >= index; i--)
                {
                    _listHeaders[i + 1] = (MimeHeaderParam)_listHeaders[i];
                }
            }

            //Save this item at the specific index
            _listHeaders[index] = header;
            _headers.Add(header.Name, header);
            return header;
        }