public bool RemoveSegment(Segment s) { bool removed = false; double? toRemove = null; foreach (var item in this.Segments) { Segment sToRemove = null; foreach (Segment segment in item.Value) { if (s.Equals(segment)) { sToRemove = segment; //if (item.Value.Count == 0) //{ // Segments.Remove(item.Key); //} } } if (sToRemove != null) { item.Value.RemoveAll(seg => seg.Equals(sToRemove)); removed = true; } if (item.Value.Count == 0) { toRemove = item.Key; } } if (toRemove != null) { this.Segments.Remove((double)toRemove); } RemoveUnconnectedEndpoints(s); s.DisconnectEndpoints(); return removed; }