public void Add(string name) { if (((this._thisElement.ItemLocked & ConfigurationValueFlags.Locked) != ConfigurationValueFlags.Default) && ((this._thisElement.ItemLocked & ConfigurationValueFlags.Inherited) != ConfigurationValueFlags.Default)) { throw new ConfigurationErrorsException(System.Configuration.SR.GetString("Config_base_attribute_locked", new object[] { name })); } ConfigurationValueFlags modified = ConfigurationValueFlags.Modified; string attribToLockTrim = name.Trim(); ConfigurationProperty property = this._thisElement.Properties[attribToLockTrim]; if ((property == null) && (attribToLockTrim != "*")) { ConfigurationElementCollection elements = this._thisElement as ConfigurationElementCollection; if ((elements == null) && (this._thisElement.Properties.DefaultCollectionProperty != null)) { elements = this._thisElement[this._thisElement.Properties.DefaultCollectionProperty] as ConfigurationElementCollection; } if (((elements == null) || (this._lockType == ConfigurationLockCollectionType.LockedAttributes)) || (this._lockType == ConfigurationLockCollectionType.LockedExceptionList)) { this._thisElement.ReportInvalidLock(attribToLockTrim, this._lockType, null, null); } else if (!elements.IsLockableElement(attribToLockTrim)) { this._thisElement.ReportInvalidLock(attribToLockTrim, this._lockType, null, elements.LockableElements); } } else { if ((property != null) && property.IsRequired) { throw new ConfigurationErrorsException(System.Configuration.SR.GetString("Config_base_required_attribute_lock_attempt", new object[] { property.Name })); } if (attribToLockTrim != "*") { if ((this._lockType == ConfigurationLockCollectionType.LockedElements) || (this._lockType == ConfigurationLockCollectionType.LockedElementsExceptionList)) { if (!typeof(ConfigurationElement).IsAssignableFrom(property.Type)) { this._thisElement.ReportInvalidLock(attribToLockTrim, this._lockType, null, null); } } else if (typeof(ConfigurationElement).IsAssignableFrom(property.Type)) { this._thisElement.ReportInvalidLock(attribToLockTrim, this._lockType, null, null); } } } if (this.internalDictionary.Contains(name)) { modified = ConfigurationValueFlags.Modified | ((ConfigurationValueFlags)this.internalDictionary[name]); this.internalDictionary.Remove(name); this.internalArraylist.Remove(name); } this.internalDictionary.Add(name, modified); this.internalArraylist.Add(name); this._bModified = true; }
public void Add(string name) { if (((_thisElement.ItemLocked & ConfigurationValueFlags.Locked) != 0) && ((_thisElement.ItemLocked & ConfigurationValueFlags.Inherited) != 0)) { throw new ConfigurationErrorsException(SR.Format(SR.Config_base_attribute_locked, name)); } ConfigurationValueFlags flags = ConfigurationValueFlags.Modified; string attribToLockTrim = name.Trim(); ConfigurationProperty propToLock = _thisElement.Properties[attribToLockTrim]; if ((propToLock == null) && (attribToLockTrim != LockAll)) { ConfigurationElementCollection collection = _thisElement as ConfigurationElementCollection; if ((collection == null) && (_thisElement.Properties.DefaultCollectionProperty != null)) { // this is not a collection but it may contain a default collection collection = _thisElement[_thisElement.Properties.DefaultCollectionProperty] as ConfigurationElementCollection; } if ((collection == null) || (LockType == ConfigurationLockCollectionType.LockedAttributes) || // If the collection type is not element then the lock is bogus (LockType == ConfigurationLockCollectionType.LockedExceptionList)) { _thisElement.ReportInvalidLock(attribToLockTrim, LockType, null, null); } else { if (!collection.IsLockableElement(attribToLockTrim)) { _thisElement.ReportInvalidLock(attribToLockTrim, LockType, null, collection.LockableElements); } } } else { // the lock is in the property bag but is it the correct type? if ((propToLock != null) && propToLock.IsRequired) { throw new ConfigurationErrorsException(SR.Format(SR.Config_base_required_attribute_lock_attempt, propToLock.Name)); } if (attribToLockTrim != LockAll) { if ((LockType == ConfigurationLockCollectionType.LockedElements) || (LockType == ConfigurationLockCollectionType.LockedElementsExceptionList)) { // If it is an element then it must be derived from ConfigurationElement if (!typeof(ConfigurationElement).IsAssignableFrom(propToLock?.Type)) { _thisElement.ReportInvalidLock(attribToLockTrim, LockType, null, null); } } else { // if it is a property then it cannot be derived from ConfigurationElement if (typeof(ConfigurationElement).IsAssignableFrom(propToLock?.Type)) { _thisElement.ReportInvalidLock(attribToLockTrim, LockType, null, null); } } } } if (_internalDictionary.Contains(name)) { flags = ConfigurationValueFlags.Modified | (ConfigurationValueFlags)_internalDictionary[name]; _internalDictionary.Remove(name); // not from parent _internalArraylist.Remove(name); } _internalDictionary.Add(name, flags); // not from parent _internalArraylist.Add(name); IsModified = true; }