2010-07-27 63 views
2

有沒有在.NET中的一種方式,我可以排序我的集合,當我不知道什麼類型的對象在運行時我會傳遞給這個集合,也通過避免反射。排序一個集合,我不知道它有什麼類型?

有什麼想法?

+0

當您添加更多的細節時,您會得到更好的答案。喜歡:你對這些物體有什麼瞭解?他們會以多種方式排序嗎?等 – 2010-07-27 17:29:48

+0

如果這些類型不共享一個共同的基類型或接口,你打算如何比較它們? – 2010-07-27 17:30:40

+0

@Darin:每個集合的成員將具有相同的類型。只是我不知道類型是什麼。我想我會和Henk提出的答案一致。 – Bohn 2010-07-27 17:32:03

回答

5

你確實需要一些比較元素的方法。通常的方法是要求IComparable接口:

class MyCollection<T> where T : IComparable<T> 
{ 
} 

或使用的IComparer,無論是對分類方法或構造函數:

class MyCollection<T> // where T : IComparable<T> 
{ 
    void Sort(IComparer<T> comparer) 
    { 
     if (comparer.Compare(a, b) > 0) { ... } 
    } 
} 
1

爲什麼你不能使用ArrayList收藏?

ArrayList list = new ArrayList(); 
list.Add("R"); 
list.Add("B"); 
list.Add("G"); 
list.Sort(); 
//produces "B","G","R" 

list.Clear(); 
list.Add(100); 
list.Add(10); 
list.Add(9); 
list.Sort(); 
//produces 9,10,100 
+0

因爲: List.Add(「R」); List.Add(「B」); List.Add(「G」); List.Add(100); List.Add(new Apple()); List.Add(new Orange()); – 2010-07-27 17:43:38

+0

,因爲它們並不總是像string,int等常規類型......大部分時間它們都是我定義的類的對象。 – Bohn 2010-07-27 19:22:56

+0

實現IComparable <>到基類(或接口) – ja72 2010-07-27 21:22:46

相關問題