比较通用列表的元素

时间:2018-04-16 13:33:42

标签: c# generics generic-list

我有一个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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

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

CompareTo