C#: Есть ли способ написать Comparer в общем виде?

Для того, чтобы у списка IList вызывать метод Sort со своим способом сравнения, иногда приходится писать свой собственный Comparer, и подсовывать его в качестве аргумента методу Sort: myList.Sort(MyComparer);

В то же время я задумался: а нельзя ли написать Comparer в таком виде:

    public static int MyTestComp<T>(T a, T b) {
         return a < b ? 1 : -1;
    }

но получил ошибку

    Operator '<' cannot be applied to operands of type 'T' and 'T'

Логически я понимаю, что компилятор прав: кто знает, что за тип я подсуну! Но, с другой стороны, если тип реализует IComparable - то, вроде бы, такой метод написать в общем виде можно было бы.

А вот вопрос: а есть ли способ это сделать? То есть, написать такой Generic, в котором я "зуб даю!" что тип Т реализует интерфейс IComparable?

Спасибо заранее за советы!


Ответы (1 шт):

Автор решения: tym32167

Вы можете явно указать компилятору, что обобщенный тип наследуется или реализует тот или иной интерфейс или является классом / структурой.

Пример

public static int MyTestComp<T>(T a, T b) where T:IComparable => a.CompareTo(b);

Больше информации в документации.

→ Ссылка