2010-07-27 71 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

相关问题