private void UpdateGraphEdges( IVertex <Tag> vertex, IReadOnlyCollection <string> newSuccessors, IReadOnlyCollection <string> newAncestors) { var oldSuccessors = vertex.Successors.Select(tag => tag.Name) .ToList().AsReadOnly(); var oldAncestors = vertex.Ancestors.Select(tag => tag.Name) .ToList().AsReadOnly(); foreach (var tagName in oldAncestors.Except(newAncestors)) { vertex.DeleteParent(_graph[tagName]); } foreach (var tagName in oldSuccessors.Except(newSuccessors)) { vertex.DeleteChild(_graph[tagName]); } foreach (var tagName in newAncestors.Except(oldAncestors)) { vertex.AddParent(_graph[tagName]); } foreach (var tagName in newSuccessors.Except(oldSuccessors)) { vertex.AddChild(_graph[tagName]); } }