Как написать вложенную общую функцию

Я пытаюсь написать общий алгоритм сортировки кучи. Я получаю следующую ошибку. В чем может быть причина?

Тип T не может использоваться как параметр типа T в родовом типе или метод Heap.MainClass.MaxHeapify<T>(T[], int, int). Здесь нет бокса или преобразования параметров типа из T в System.IComparable<T> (CS0314) (HeapSort)

Ответ 1

Вам нужно указать одно и то же общее ограничение, которое T должно реализовать IComparable<T> в функции HeapSort:

private static void HeapSort<T>(T[] items) where T : IComparable<T>

Вы указали это ограничение на метод MaxHeapify и для его вызова T должно удовлетворять этому условию.

Ответ 2

Метод MaxHeapify<T>() имеет общее ограничение where T : IComparable, но ваш метод HeapSort<T>() его не имеет, поэтому компилятор не может разрешить вызов метода MaxHeapify из метода HeapSort. Вы должны добавить общее ограничение where : IComparable к вашему методу HeapSort<T>().

private static void HeapSort<T>(T[] items) where T : IComparable<T>