基本排序问题 - C# - (Java程序员学习C#)

时间:2009-06-26 17:09:19

标签: c# sorting collections

我正在研究一个对象列表,不幸的是,我没有从调试中获取信息,看看我哪里出错了。

我有一个自定义类,我在其中实现了CompareTo方法,并在该类的项目列表上调用.Sort()。不幸的是,我的程序实际上从未实际使用compareTo()方法......它会在调用.Sort()时立即出错并立即关闭。

我应该注意什么呢?

这是我的类定义,类的接口列表。

    /// <summary>
/// Summary description for ClientWorkspace.
/// </summary>
public class ClientWorkspace : IStorable
{ }

我没有列出compareTo方法,因为它甚至都没有找到该代码。

8 个答案:

答案 0 :(得分:5)

我认为异常消息是这样的:“无法比较数组中的两个元素”与“至少有一个对象必须实现IComparable接口”的不足之处。这为您提供了您需要知道的信息:

您尚未宣布您的课程实施IComparable界面。

仅仅实现CompareTo方法是不够的,因为在尝试通过该接口调用IComparable之前,排序算法将查找CompareTo接口。

...这就是为什么你的方法没有被调用。

答案 1 :(得分:4)

尝试让您的类实现IComparable接口。

  

如果是自定义类或结构   没有实现IComparable,其成员   无法订购和排序   操作可以抛出一个   InvalidOperationException异常。

Source: MSDN

答案 2 :(得分:1)

您的课程应该实施IComparableIComparable<>,以便排序功能了解您的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

上的文档
相关问题