Положим, есть следуюший класс:
class Operation
{
public string Foo { get; set; }
public string Bar { get; set; }
public int Baz { get; set; }
}
Я хочу реализовать компарер IComparer
class OperationComparer : IComparer
Однако непонятно, что возвращать, если свойства не равны. Когда возвращать 1, а когда −1?
Ответ
Общий порядок написания компарера следующий:
Сравнить первое свойство, по которому происходит сравнение (сортировка), получив −1/0/1 (меньше/равно/больше).
Если свойства не равны, вернуть −1 или 1 в соответствии с результатом сравнения. Для изменения порядка сортировки вернуть противоположное число.
Если свойства равны, перейти к пункту 1 со следующим свойством. Если свойства кончились, вернуть результат последнего сравнения как есть.
Код получается следующий:
class OperationComparer : IComparer
Стоит отметить, что в современном коде подобные компареры обычно не нужны, так как есть LINQ, в котором с помощью методов OrderBy и ThenBy ту же логику можно выразить гораздо проще.
Комментариев нет:
Отправить комментарий