private void MergeIfAdjacent(int left, int right) { Debug.Assert((right - left) == 1); if ((left < 0) || (right >= this.items.Count)) { return; } var leftItem = this.items[left]; var rightItem = this.items[right]; if (!this.valueEqualityComparer.Equals(leftItem.Value, rightItem.Value)) { return; } if (Incrementor <TKey> .Adjacent(leftItem.Key.To, rightItem.Key.From)) { this.items.RemoveAt(right); this.items[left] = new KeyValuePair <Range <TKey>, TValue>(new Range <TKey>(leftItem.Key.From, rightItem.Key.To), leftItem.Value); } }