/// <summary> /// See the <see cref="IImmutableDictionary{TKey, TValue}"/> interface. /// </summary> public ImmutableDictionary <TKey, TValue> WithComparers(IEqualityComparer <TKey>?keyComparer, IEqualityComparer <TValue>?valueComparer) { if (keyComparer == null) { keyComparer = EqualityComparer <TKey> .Default; } if (valueComparer == null) { valueComparer = EqualityComparer <TValue> .Default; } if (this.KeyComparer == keyComparer) { if (this.ValueComparer == valueComparer) { return(this); } else { // When the key comparer is the same but the value comparer is different, we don't need a whole new tree // because the structure of the tree does not depend on the value comparer. // We just need a new root node to store the new value comparer. var comparers = _comparers.WithValueComparer(valueComparer); return(new ImmutableDictionary <TKey, TValue>(_root, comparers, _count)); } } else { var comparers = Comparers.Get(keyComparer, valueComparer); var set = new ImmutableDictionary <TKey, TValue>(comparers); set = set.AddRange(this, avoidToHashMap: true); return(set); } }