我有一个TestClass<T>将演变为基于堆的优先级队列。堆是List<T>类型。
我正在重新排序代码,因此需要比较的元素List<T>。你可以猜到我收到了 error CS0019: Operator < cannot be applied to operands of type T and T。
我知道这并不奇怪,并且C#泛型不是C ++模板。所以,我试图约束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;
}
}
}
倚天杖
相关分类