3 // Copyright (c) Microsoft Corporation. All rights reserved.
6 // <OWNER>Microsoft</OWNER>
9 using System.Diagnostics.Contracts;
11 namespace System.Collections {
14 internal class CompatibleComparer: IEqualityComparer {
16 #pragma warning disable 618
17 IHashCodeProvider _hcp;
19 internal CompatibleComparer(IComparer comparer, IHashCodeProvider hashCodeProvider) {
21 _hcp = hashCodeProvider;
23 #pragma warning restore 618
25 public int Compare(Object a, Object b) {
27 if (a == null) return -1;
28 if (b == null) return 1;
29 if (_comparer != null)
30 return _comparer.Compare(a,b);
31 IComparable ia = a as IComparable;
33 return ia.CompareTo(b);
35 throw new ArgumentException(Environment.GetResourceString("Argument_ImplementIComparable"));
38 public new bool Equals(Object a, Object b) {
39 return Compare(a, b) == 0;
42 public int GetHashCode(Object obj) {
44 throw new ArgumentNullException("obj");
46 Contract.EndContractBlock();
49 return _hcp.GetHashCode(obj);
50 return obj.GetHashCode();
53 // These are helpers for the Hashtable to query the IKeyComparer infrastructure.
54 internal IComparer Comparer {
60 // These are helpers for the Hashtable to query the IKeyComparer infrastructure.
61 #pragma warning disable 618
62 internal IHashCodeProvider HashCodeProvider {
67 #pragma warning restore 618