从'dungGenerator.Room'到'System.IComparable'没有隐式引用转换

时间:2014-05-15 19:37:55

标签: c# templates compareto icomparable

好吧,我按照许多教程使其工作,但我从未找到解决方案。

我在静态类中有这个功能:

        public static bool isDifferent<T>(List<T> list1, List<T> list2) where T : IComparable
    {
        foreach (T item1 in list1)
        {
            bool different = false;
            foreach (T item2 in list2)
            {
                if (item2.CompareTo(item1) != 0)
                    different = true;
                else
                {
                    different = false;
                    break;//fuck yes i will use a break
                }
            }
            if (different)
                return true;
        }
        return false;
    }

它适用于int列表 但现在我要比较一个名为room的自定义类的列表。

我的班级声明有他需要的全部:公共课室:IComparable

我添加了CompareTo函数。

        public int CompareTo(Room other)
    {
        if (other == null) return 1;

        if (Methods.isDifferent(doors, other.doors))
            return 1;
        else 
            return 0;

    }

所以,每个房间都有一个走廊ID列表,这是我需要比较的唯一值。

我遵循了许多教程,它们似乎与我的结构相同。

2 个答案:

答案 0 :(得分:1)

根据您的提问,我可以推断您实施了IComparable&lt; Room &gt;这个界面。

但是,此接口 IComparable&lt; T&gt; 不能分配给 IComparable

实施 IComparable ,声明方法&#34; public int CompareTo( object other)&#34;。

答案 1 :(得分:1)

您的问题是Room实现了IComparable<Room>,它与IComparable的界面不同。您应该将您的方法更新为:

public static bool isDifferent<T>(List<T> list1, List<T> list2) where T : IComparable<T>