使用Comparison <T>()与三个参数的比较重载

Fra*_*zzi 2 c# icomparer

我有一个List<Points>(),我想用自定义比较器函数对它进行排序.

我做了:

public int MyCompare(Point p1, Point p2)
{
    ...
}

// In my main
// ...
points_.Sort(MyCompare); 
// ...
Run Code Online (Sandbox Code Playgroud)

我工作,好吧.

现在我想排序除第一个元素之外的所有元素,所以我想这样做:

points_.Sort(1, points_.Count()-1, MyCompare); 
Run Code Online (Sandbox Code Playgroud)

但是,由于这个重载,他希望将IComparer作为参数.

我怎么解决这个问题?

请注意,Point 它不是自定义类,而是来自Xna框架.我不想用它来实现自定义类: IComparer

das*_*ght 8

如果您不想实现IComparer,可以使用Comparer<T>.Create静态方法从委托创建一个,如下所示:

points_.Sort(1, points_.Count()-1, Comparer.Create(MyCompare));
Run Code Online (Sandbox Code Playgroud)

甚至

points_.Sort(1, points_.Count()-1, Comparer.Create((a, b) => {
    ... // comparison logic goes here
}));
Run Code Online (Sandbox Code Playgroud)

  • *在.NET 4.5及更高版本中受支持. (2认同)