protected internal override void Unmerge(ConfigurationElement sourceElement, ConfigurationElement parentElement, ConfigurationSaveMode updateMode) { 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; if (pitem != null && updateMode != ConfigurationSaveMode.Full) { ConfigurationElement nitem = CreateNewElementInternal(null); nitem.Unmerge(sitem, pitem, ConfigurationSaveMode.Minimal); if (nitem.HasValues()) { BaseAdd(nitem); } } else { ConfigurationElement nitem = CreateNewElementInternal(null); nitem.Unmerge(sitem, null, ConfigurationSaveMode.Full); BaseAdd(nitem); } } if (updateMode == 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); } } } }