2009-04-13 56 views
1

我寫了一個小應用程序,允許我比較兩個數據庫模式以檢查結構的差異。它一路下降到專欄細節,這很好。當我比較非常小的數據庫時,我沒有任何問題,但是當我開始將數據庫與數百個表進行比較時,上下滾動以查找錯誤的位置是煩人的。最初,我使用KeyedCollection來保存表的列表,但由於它不允許任何種類的排序,因此我改爲SortedList。 SortedList會對索引進行排序,這會按字母順序給出表格,但這比我需要的要少。我需要的是一個類,它允許我根據對象屬性進行排序,而不僅僅是索引值。我想把錯誤的表格推到列表的起始處,以便於使用。任何人都有一個想法,我可以用它來完成這個課程?尋求允許自定義排序方法的類

EDIT1:List類沒有索引,這對於我的類是至關重要的。我試過使用Dictionary,它有一個索引,但沒有排序方法。實現IComparer不起作用,因爲構造函數只接受索引類型的IComparer。由於IComparer是另一個無法訪問我的列表類的內部值列表的類,因此無法根據對象屬性進行比較。

EDIT2:我需要一個沒有被索引值由對象屬性排序指標,一類,但我開始相信這樣的類不存在。

回答

0

有沒有簡單的方法來做到這一點。也許不是一個困難的方式。由於它是用來製作輸出的,我決定改用多個部分輸出循環來達到我想要的結果。

0

使用this重載的構造函數構造SortedList,其中包含自定義IComparer類,您可以使用該類實現排序方式。

2

然後你需要創建一個類來實現System.Collections.Generic.IComparer,然後你就可以把所有的對象爲支持基於的IComparer排序的集合,例如:

系統.Collections.Generic.List將允許您根據自己的實現進行排序。

這裏是一個link到一個很好的例子,以幫助您瞭解這一點。

0

如果你正在試圖做的是建立自己的排序都那麼這可能是最簡單的:

List<Foo> myFoos = new List<Foo>(); 
//--Write code to fill the list 

//sort by ID 
myFoos.Sort(delegate(Foo foo1, Foo foo2) 
{ 
    return foo1.ID.CompareTo(foo2.ID); 
}); 

//Sort by Last Name 
myFoos.Sort(delegate(Foo foo1, Foo foo2) 
{ 
    return foo1.LastName.CompareTo(foo2.LastName); 
}); 

如果你不想使用匿名方法,並希望有相同類型的排序在多個地方你也可以這樣做:

public class FooIDCompare : IComparer<Foo> 
    { 
     #region IComparer<foo> Members 

     public int Compare(Foo x, Foo y) 
     { 
      return x.ID.CompareTo(y.ID); 
     } 

     #endregion 
    } 

FooIDCompare idCompare = new FooIDCompare(); 
myFoos.Sort(idCompare);