我有一个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;
}
}
}
答案 0 :(得分:1)
使用myRegion
而不是使用IComparable
和>
使用<
方法
CompareTo