猿问

比较通用列表的元素

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

        }

    }

}


慕桂英3389331
浏览 126回答 1
1回答

倚天杖

使用IComparable和代替使用>和<使用CompareTo方法value.CompareTo(value2)&nbsp;<=&nbsp;0
随时随地看视频慕课网APP
我要回答