至少有一个对象必须实现IComparable。 SortedSet C#

时间:2015-12-16 23:05:58

标签: c#

在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;
    }

}

2 个答案:

答案 0 :(得分:2)

扩展@Claudiu Georgiu的评论,SortedSet的{​​{3}}应该利用您的自定义比较器。但是,您当前可能使用的Min property要求您的NODE类实现IComparable<T>IComparable接口。如果你切换到调用属性,它应该工作。

答案 1 :(得分:1)

你的问题很模糊,但听起来你的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);
    }
}