使用comparon()对三个参数进行重载比较
本文关键字:三个 参数 比较 重载 comparon 使用 | 更新日期: 2023-09-27 18:10:08
我有一个List<Points>()
,我想用一个自定义比较器函数对它进行排序。
我:
public int MyCompare(Point p1, Point p2)
{
...
}
// In my main
// ...
points_.Sort(MyCompare);
// ...
I works, right.
现在我想对除第一个元素之外的所有元素进行排序,所以我想这样做:
points_.Sort(1, points_.Count()-1, MyCompare);
但是通过这个重载,他想要一个IComparer作为参数。
我该如何解决这个问题?
注意Point
不是一个自定义类,它来自Xna框架。我不想实现一个自定义类与: IComparer
如果不想实现IComparer
,可以使用Comparer<T>.Create
静态方法从委托创建一个,如下所示:
points_.Sort(1, points_.Count()-1, Comparer.Create(MyCompare));
或者
points_.Sort(1, points_.Count()-1, Comparer.Create((a, b) => {
... // comparison logic goes here
}));
正如@dasblinkenlight在。net 4.5+中指出的那样,有一个特别的方法可以将Comparison<T>
委托转换为IComparer<T>
。
但是如果你坚持使用较低的版本,你可以使用这个类将Comparison<T>
委托转换为IComparer<T>
:
public class DelegateComparer<T> : IComparer<T>
{
private readonly Comparison<T> compDelegate;
public DelegateComparer(Comparison<T> compDelegate)
{
if (compDelegate == null)
throw new ArgumentNullException("compDelegate");
this.compDelegate = compDelegate;
}
public int Compare(T x, T y)
{
return compDelegate(x, y);
}
}
使用例子:
points_.Sort(1, points_.Count()-1, new DelegateComparer<Point>(MyCompare));