| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // Licensed to the .NET Foundation under one or more agreements.
- // The .NET Foundation licenses this file to you under the MIT license.
- // See the LICENSE file in the project root for more information.
- #nullable enable
- #pragma warning disable 618 // obsolete types
- namespace System.Collections
- {
- internal sealed class CompatibleComparer : IEqualityComparer
- {
- private readonly IHashCodeProvider? _hcp;
- private readonly IComparer? _comparer;
- internal CompatibleComparer(IHashCodeProvider? hashCodeProvider, IComparer? comparer)
- {
- _hcp = hashCodeProvider;
- _comparer = comparer;
- }
- internal IHashCodeProvider? HashCodeProvider => _hcp;
- internal IComparer? Comparer => _comparer;
- public new bool Equals(object? a, object? b) => Compare(a, b) == 0;
- public int Compare(object? a, object? b)
- {
- if (a == b)
- return 0;
- if (a == null)
- return -1;
- if (b == null)
- return 1;
- if (_comparer != null)
- {
- return _comparer.Compare(a, b);
- }
- if (a is IComparable ia)
- {
- return ia.CompareTo(b);
- }
- throw new ArgumentException(SR.Argument_ImplementIComparable);
- }
- public int GetHashCode(object obj)
- {
- if (obj == null)
- {
- throw new ArgumentNullException(nameof(obj));
- }
- return _hcp != null ?
- _hcp.GetHashCode(obj) :
- obj.GetHashCode();
- }
- }
- }
|