У меня есть TestClass<T>
, который превратится в очередь с приоритетом на основе кучи. Куча имеет тип List<T>
.
Я работал над изменением порядка кода, и мне нужно было сравнить элементы List<T>
. Как вы можете догадаться, я получил error CS0019: Operator < cannot be applied to operands of type T and T
.
Я ЗНАЮ, что это не удивительно, и дженерики С# не являются шаблонами С++. Итак, я попытался ограничить Type T
с помощью IComparable
. Но и это не помогло.
Предложения, которые я нашел (для решения этой проблемы), в основном заключались в создании фиктивного класса, который определяет такие операторы и ограничивает T
этим классом. Однако я не нашел это решение очень удобным.
Итак, есть ли другие способы решить эту проблему?
Вот соответствующий фрагмент кода:
using System;
using System.Collections.Generic;
public class TestClass<T>
where T : IComparable
{
private List<T> heap;
public TestClass(int maxSize)
{
this.heap = new List<T>(maxSize + 1);
}
private void ReorderUpwards(int nodeIndex)
{
while (nodeIndex > 1 && this.heap[nodeIndex / 2] < this.heap[nodeIndex])
{
nodeIndex /= 2;
}
}
}