我有一个实现IComparable的类。
public class MyClass : IComparable<MyClass>
{
public int CompareTo(MyClass c)
{
return this.whatever.CompareTo(c.whatever);
}
etc..
}然后,我可以调用我的类的泛型列表的排序方法
List<MyClass> c = new List<MyClass>();
//Add stuff, etc.
c.Sort();并根据我的比较器对列表进行排序。
我如何指定更多的比较器来根据MyClass的其他属性以不同的方式对我的集合进行排序,以便让用户以多种不同的方式对我的集合进行排序?
发布于 2010-03-20 03:45:52
要在类中设置排序,请执行以下操作:
public static Comparison<MyClass> OtherComparison = delegate(MyClass object1, MyClass object2)
{
return object1.Whatever.CompareTo(object2.Whatever);
};然后使用新的比较进行排序:
List<MyClass> myClassList = new List<MyClass>();
myClassList.Sort(MyClass.OtherComparison);除非您显然不想对空列表进行排序:)
发布于 2010-03-20 03:43:33
您可以使用特定的比较器作为参数来调用Sort。参考:MSDN
发布于 2010-03-20 03:51:43
在这个方向上的一个步骤是使用排序重载,让您指定一个IComparer<T> (虽然不是IComparable<T> )。
如果您已经有了很多IComparable<T>实现,那么编写一个比较两个IComparable<T>实例的通用IComparer<T>实现应该很简单。事实上,我对BCL中没有这样的类感到有点惊讶,但我还没能找到一个。
Comparer<T>.Default很接近,但并不完全是这样。
https://stackoverflow.com/questions/2480111
复制相似问题