2009-06-26 42 views
0

我正在对对象列表进行排序,但不幸的是,我没有从调试中获取信息,以查看我要出错的地方。基本排序问题 - C# - (Java程序员学习C#)

我有一个自定义的类,我实现了一个CompareTo方法,并且我在该类的一个项目列表上调用了.Sort()。不幸的是,我的程序从来没有真正进入compareTo()方法......它在调用.Sort()时立即关闭。

我一般应该注意什么?

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

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

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

+2

错误...怎么样?什么是例外? – 2009-06-26 17:11:52

+0

你会得到什么样的例外? – Christopher 2009-06-26 17:12:11

+0

这是我最大的问题。我找不到例外。我“进入”调试器中的排序调用,它跳转到我继承的代码中的这个“Dispose”方法。 等待...在出现的对话框中显示“无法比较阵列中的两个元素” 不幸的是,我现在对C#的知识还不够强,无法提供更多信息。 – Kivus 2009-06-26 17:21:43

回答

5

文档相信异常消息会是这样的:“未能比较数组中的两个元素”与“至少一个对象必须实现IComparable接口”的的InnerException。这给你你需要知道的:

你还没有宣布你的类实现IComparable接口。

这是不够的,只是实现CompareTo方法,因为排序算法将寻找IComparable接口试图通过这个接口来调用CompareTo之前。

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

4

试着让你的课程实现IComparable接口。

如果自定义类或结构不 未实现IComparable,其成员 无法下单和排序 操作可以抛出一个 InvalidOperationException异常。

Source: MSDN

1

你的类应该实现IComparableIComparable<>为了排序功能,了解你的CompareTo()方法。

0

IStorable?那是什么?它不是在.NET中被命名为Sortable

public class ClientWorkspace : IComparable<ClientWorkspace> 
{ } 
0

既然你是一个Java程序员,你可能期望编译器警告你,可以通过特定的方法抛出可能的例外。请注意,C#不需要您捕捉任何异常。这样做:

try { 
    whatever 
} catch (Exception e) { 
    // put a breakpoint here and examine e. 
} 
0

你实现IComparable或IComparable的<ClientWorkspace>?

作为替代方案,如果你不想让你的类来实现这一点,你还可以实现的IComparer <ClientWorkspace>另一个类,或创建一个比较程序<ClientWorkspace>委托的匹配方法。

.NET没有隐式的.compareTo方法。

0

您可以实现IComparable接口并在那里提供CompareTo方法的实现。这应该做到这一点。

MSDN上有一个例子。

0

您的课程需要实现IComparable<T>接口。查看MSDN