protected internal override void Unmerge(ConfigurationElement sourceElement, ConfigurationElement parentElement, ConfigurationSaveMode saveMode) { ConfigurationElementCollection source = (ConfigurationElementCollection)sourceElement; ConfigurationElementCollection parent = (ConfigurationElementCollection)parentElement; for (int n = 0; n < source.Count; n++) { ConfigurationElement sitem = source.BaseGet(n); object key = source.GetElementKey(sitem); ConfigurationElement pitem = parent != null?parent.BaseGet(key) as ConfigurationElement : null; ConfigurationElement nitem = CreateNewElementInternal(null); if (pitem != null && saveMode != ConfigurationSaveMode.Full) { nitem.Unmerge(sitem, pitem, saveMode); if (nitem.HasValues(pitem, saveMode)) { BaseAdd(nitem); } } else { nitem.Unmerge(sitem, null, ConfigurationSaveMode.Full); BaseAdd(nitem); } } if (saveMode == ConfigurationSaveMode.Full) { EmitClear = true; } else if (parent != null) { for (int n = 0; n < parent.Count; n++) { ConfigurationElement pitem = parent.BaseGet(n); object key = parent.GetElementKey(pitem); if (source.IndexOfKey(key) == -1) { if (removed == null) { removed = new ArrayList(); } removed.Add(pitem); } } } }