比较通用列表的元素

Comparing Elements of a Generic List

我有一个 TestClass<T> 将演变成基于堆的优先级队列。堆是List<T>类型。

我正在重新排序代码,我需要比较 List<T> 的元素。如您所料,我收到了 error CS0019: Operator < cannot be applied to operands of type T and T.

我知道这并不奇怪,C# 泛型不是 C++ 模板。所以,我试图用 IComparable 来限制 Type T。但它也没有帮助。

我找到的建议(为了解决这个问题)主要是创建一个虚拟 class 来定义此类运算符并用此 class 约束 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;
        }
    }
}

使用 IComparable 而不是使用 >< 使用 CompareTo 方法

value.CompareTo(value2) <= 0