2009-06-26 41 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