Pitfalls - StephenCleary/Comparers GitHub Wiki
The one major pitfall in the Comparers library is that every comparer implementation assumes that it has a GetHashCode
implementation available.
The core comparer implementations (Compare<T>.Default()
, Compare<T>.Null()
, and types derived from ComparableBase<T>
) do provide GetHashCode
. Every comparer extension provides GetHashCode
if their source comparer(s) provide GetHashCode
.
The pitfall comes in when a comparer extension is used on a "bare bones" comparer that does not provide GetHashCode
. This happens in two situations:
- A custom
IComparer<T>
implementation is used with a comparer extension from the Comparers library. - An
AnonymousComparer<T>
instance is used without defining theGetHashCode
delegate.
In this case, the resulting comparer will function correctly as a comparer, but it will fail at runtime if it ever attempts to execute GetHashCode
.