Fix equality comparer used in ReferencedObjectCollection's overflow dictionary #7433
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
ReferencedObjectCollection
uses a hybrid approach to storing object references: an array is used for tracking the first 64 reference objects and aDictionary<object, uint>
is used for subsequent objects.That dictionary uses
ReferenceEqualsComparer.Default
to check for equality.ReferenceEqualsComparer
doesn't explicitly define aDefault
property, though, instead it inherits fromEqualityComparer<object>
. This was the mistake: theDefault
property was returning the default equality comparer which means we do not have reference equality. Eg, It can tell you that aUri
andstring
are equal, as it was in the test case which @mcm2020 provided.Microsoft Reviewers: Open in CodeFlow