我正在研究一个对象列表,不幸的是,我没有从调试中获取信息,看看我哪里出错了。
我有一个自定义类,我在其中实现了CompareTo方法,并在该类的项目列表上调用.Sort()。不幸的是,我的程序实际上从未实际使用compareTo()方法......它会在调用.Sort()时立即出错并立即关闭。
我应该注意什么呢?
这是我的类定义,类的接口列表。
/// <summary>
/// Summary description for ClientWorkspace.
/// </summary>
public class ClientWorkspace : IStorable
{ }
我没有列出compareTo方法,因为它甚至都没有找到该代码。
答案 0 :(得分:5)
我认为异常消息是这样的:“无法比较数组中的两个元素”与“至少有一个对象必须实现IComparable接口”的不足之处。这为您提供了您需要知道的信息:
您尚未宣布您的课程实施IComparable
界面。
仅仅实现CompareTo
方法是不够的,因为在尝试通过该接口调用IComparable
之前,排序算法将查找CompareTo
接口。
...这就是为什么你的方法没有被调用。
答案 1 :(得分:4)
尝试让您的类实现IComparable接口。
如果是自定义类或结构 没有实现IComparable,其成员 无法订购和排序 操作可以抛出一个 InvalidOperationException异常。
答案 2 :(得分:1)
您的课程应该实施IComparable
或IComparable<>
,以便排序功能了解您的CompareTo()
方法。
答案 3 :(得分:0)
IStorable
?那是什么?它在.NET中未命名为Sortable
。
public class ClientWorkspace : IComparable<ClientWorkspace>
{ }
答案 4 :(得分:0)
由于您是Java程序员,您可能希望编译器警告您可能由特定方法引发的异常。请注意,C#不要求您捕获任何异常。这样做:
try {
whatever
} catch (Exception e) {
// put a breakpoint here and examine e.
}
答案 5 :(得分:0)
您是否实现了IComparable或IComparable&lt; ClientWorkspace&gt;?
作为替代方案,如果您不希望您的类实现它,您还可以实现IComparer&lt; ClientWorkspace&gt;在另一个类中,或创建一个与Comparer&lt; ClientWorkspace&gt;匹配的方法委派。
.NET没有隐式.compareTo方法。
答案 6 :(得分:0)
您可以实现IComparable接口并在那里提供CompareTo方法的实现。应该这样做。
MSDN上有一个例子。
答案 7 :(得分:0)
您的课程需要实施IComparable<T>
界面。请参阅MSDN