public void ResolveWithDefaults() { // Add missing entries foreach (PathEntry defaultpath in DefaultValues) { var path = Paths.FirstOrDefault(p => p.System == defaultpath.System && p.Type == defaultpath.Type); if (path == null) { Paths.Add(defaultpath); } } List <PathEntry> entriesToRemove = new List <PathEntry>(); // Remove entries that no longer exist in defaults foreach (PathEntry pathEntry in Paths) { var path = DefaultValues.FirstOrDefault(p => p.System == pathEntry.System && p.Type == pathEntry.Type); if (path == null) { entriesToRemove.Add(pathEntry); } } foreach (PathEntry entry in entriesToRemove) { Paths.Remove(entry); } // Add missing displaynames var missingDisplayPaths = Paths.Where(p => p.SystemDisplayName == null).ToList(); foreach (PathEntry path in missingDisplayPaths) { path.SystemDisplayName = DefaultValues.First(p => p.System == path.System).SystemDisplayName; } }