/// <summary>
 /// Удаляет опцию CURL.
 /// </summary>
 /// <param name="key">Ключ опции.</param>
 public void Remove(CURLOptionKey key)
 {
     lock (OptionMap)
     {
         OptionMap.Remove(key);
     }
 }
        /// <summary>
        /// Устанавливает опцию CURL.
        /// </summary>
        /// <param name="key">Ключ опции.</param>
        /// <param name="value">Значение опции.</param>
        public void Set(CURLOptionKey key, string value = null)
        {
            var option = new CURLOption(key, value);

            lock (OptionMap)
            {
                OptionMap[key] = option;
            }
        }
        /// <summary>
        /// Инициализирует экземпляр опции CURL.
        /// </summary>
        /// <param name="key">Ключ опции.</param>
        /// <param name="value">Значение опции.</param>
        public CURLOption(CURLOptionKey key, string value = null)
        {
            if (CURLOptionKey.TARGET == key && string.IsNullOrEmpty(value))
            {
                throw new IncorrectDataException("TARGET string cannot be empty.");
            }

            Key   = key;
            Value = value;
        }
        /// <summary>
        /// Возвращает опцию по ключу.
        /// </summary>
        /// <param name="key">Ключ опции.</param>
        /// <returns>Опция.</returns>
        public CURLOption this[CURLOptionKey key]
        {
            get
            {
                lock (OptionMap)
                {
                    if (OptionMap.ContainsKey(key))
                    {
                        return(OptionMap[key]);
                    }

                    return(null);
                }
            }
        }