public void SetProperty(IOption setting, object value, bool cacheDescription, bool persistToSettingsContainer)

        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }

            PropertiesDictionary properties = persistToSettingsContainer ? GetSettingsContainer(setting, true) : this;

            if (value == null && properties.ContainsKey(setting.Name))
            {
                properties.Remove(setting.Name);
                return;
            }

            if (cacheDescription)
            {
                SettingNameToDescriptionsMap = SettingNameToDescriptionsMap ?? new Dictionary <string, string>();
                SettingNameToDescriptionsMap[setting.Name] = setting.Description;
            }

            properties[setting.Name] = value;
        }