代码之家  ›  专栏  ›  技术社区  ›  Gary Willoughby

如何为一个IComparable<T>类实现多个比较器?

  •  11
  • Gary Willoughby  · 技术社区  · 15 年前

    我有一个实现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的其他属性以不同的方式对集合进行排序,以便用户以多种不同的方式对集合进行排序?

    4 回复  |  直到 15 年前
        1
  •  14
  •   Kevin Crowell    15 年前

    要在类中设置排序:

    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);
    

        2
  •  9
  •   CookieOfFortune    15 年前

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

        3
  •  3
  •   Mark Seemann    15 年前

    朝这个方向迈出的一步是使用排序重载,让您指定 IComparer<T> (不是 IComparable<T> ,尽管如此)。

    如果你已经有很多 i可比较<T> i比较者<T> i可比较<T> 实例。事实上,我有点惊讶这样一个类在BCL中还不存在,但是我还没有找到一个。

    Comparer<T>.Default 很接近,但不完全。

        4
  •  2
  •   Achim    15 年前