[release/10.0] Removes IEquatable constraint from ThrowIfEqual/NotEqual #119252
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.
Backport of #118291 to release/10.0, which resolved #118053.
Removes the
IEquatableconstraint from theThrowIfEqualandThrowIfNotEqualmethods inArgumentOutOfRangeException.IEquatable, relying onEqualityComparer.Default.Equalsfor equality comparisons./cc @jeffhandley @IDisposable
Customer Impact
IEquatable<T>constraint prevents customers from using theThrowIfEqualandThrowIfNotEqualmethods on nullable value types (e.g.,int?).ThrowIfEqualandThrowIfNotEqualmethods to validate enum arguments:Regression
Testing
Existing product code and test code was already using this method. New tests are added in #119263 that explicitly exercise the customer scenarios mentioned above.
Risk
Low. The implementation is unchanged with the removal of the constraint. As @tannergooding mentioned on the issue discussion, "We use
EqualityComparerin many similar cases and for similar reasons, it is correspondingly optimized as[Intrinsic]by the runtime in several scenarios."