必须至少有一个对象实现IComparable.排序集合C#

本文关键字:IComparable 排序 集合 实现 一个对象 | 更新日期: 2023-09-27 18:27:03

在c#中,当使用已排序的集合数据结构并使用ICompare对集合进行排序时一个特定的值插入或添加有效,但当试图获得集合中的最小值时,会引发一个异常我的代码

class priorityqueue
{
     public SortedSet<NODE> opendList;
    private class SortAccordingToTotal : IComparer<NODE>
    {
       public int Compare(NODE a, NODE b)
        {
            return a.TOTAL.CompareTo(b.TOTAL);
        }
    }
    public priorityqueue()
    {
        opendList = new SortedSet<NODE>(new SortAccordingToTotal());
    }
    public void Push (NODE N)
    {
        opendList.Add(N);
    }
    public bool search(NODE N)
    {
        return opendList.Contains(N);
    }
    public NODE POP()
    {
        NODE TEMP = new NODE();
        TEMP =  opendList.Min(); 
        opendList.Remove(TEMP);
        return TEMP;
    }
}

必须至少有一个对象实现IComparable.排序集合C#

扩展@Claudiu Georgiu的注释,SortedSetMin属性应该利用您的自定义比较器。但是,您当前可能使用的Min()扩展方法要求NODE类实现IComparable<T>IComparable接口。如果您切换到调用属性,它应该可以工作。

您的问题很模糊,但听起来您的NODE类需要实现IComparable接口。幸运的是,这样做很容易。

public class NODE: IComparable
{
    public int total{ get; set; }
    public int CompareTo(object obj)
    {
        if (obj == null) return 1;
        var otherNode = obj as Hobby;
        return this.total.CompareTo(otherNode.total);
    }
}