首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# -如何为IComparable<T>类实现多个比较器?

C# -如何为IComparable<T>类实现多个比较器?
EN

Stack Overflow用户
提问于 2010-03-20 03:40:59
回答 4查看 9.6K关注 0票数 11

我有一个实现IComparable的类。

代码语言:javascript
复制
public class MyClass : IComparable<MyClass>
{
    public int CompareTo(MyClass c)
    {
        return this.whatever.CompareTo(c.whatever);
    }

    etc..
}

然后,我可以调用我的类的泛型列表的排序方法

代码语言:javascript
复制
List<MyClass> c = new List<MyClass>();
//Add stuff, etc.

c.Sort();

并根据我的比较器对列表进行排序。

我如何指定更多的比较器来根据MyClass的其他属性以不同的方式对我的集合进行排序,以便让用户以多种不同的方式对我的集合进行排序?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-20 03:45:52

要在类中设置排序,请执行以下操作:

代码语言:javascript
复制
public static Comparison<MyClass> OtherComparison = delegate(MyClass object1, MyClass object2)
{
    return object1.Whatever.CompareTo(object2.Whatever);
};

然后使用新的比较进行排序:

代码语言:javascript
复制
List<MyClass> myClassList = new List<MyClass>();
myClassList.Sort(MyClass.OtherComparison);

除非您显然不想对空列表进行排序:)

票数 14
EN

Stack Overflow用户

发布于 2010-03-20 03:43:33

您可以使用特定的比较器作为参数来调用Sort。参考:MSDN

票数 9
EN

Stack Overflow用户

发布于 2010-03-20 03:51:43

在这个方向上的一个步骤是使用排序重载,让您指定一个IComparer<T> (虽然不是IComparable<T> )。

如果您已经有了很多IComparable<T>实现,那么编写一个比较两个IComparable<T>实例的通用IComparer<T>实现应该很简单。事实上,我对BCL中没有这样的类感到有点惊讶,但我还没能找到一个。

Comparer<T>.Default很接近,但并不完全是这样。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2480111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档