интерфейсы IComparer
(как общий, так и не универсальный) позволяют сравнивать два экземпляра друг с другом.
Метод Compare
позволяет сравнивать сам объект с другим экземпляром.Конечно, когда текущий экземпляр имеет значение null, в этом случае вы получите NullReferenceException
, так как вы вызываете Compare
для экземпляра 'null'.Класс, реализующий IComparer
, может решить эту проблему.
Итак, когда вы реализуете интерфейс IComparer, у вас будет класс, у которого есть метод Compare, который можно вызывать так:
public class MyObjectComparer : IComparer<MyObject>
{
public int Compare( MyObject first, MyObject second )
{
// implement logic here to determine whether first is less, greater or equal then second.
}
}
Это позволяет вам сделать это:
var c = new MyObjectComparer();
var one = new MyObject();
var two = new MyObject();
c.Compare (one, two);
Когда вы создаете экземпляр Hashtable
с помощью конструктора, в котором вы указываете экземпляр IEqualityComparer
, это означает, что данный IEqualityComparer
будет использоваться для определения наличия определенного ключа в Hashtable.
В противном случае будет использован метод Compare объекта ключа.