我有一个List<Points>(),我想用自定义比较器函数对它进行排序。
我做了:
public int MyCompare(Point p1, Point p2)
{
...
}
// In my main
// ...
points_.Sort(MyCompare);
// ...我在工作,好吧。
现在,除了第一个元素之外,我想对所有的内容进行排序,所以我想这样做:
points_.Sort(1, points_.Count()-1, MyCompare); 但是,在这种过载的情况下,他想要一个IComparer作为论据。
我怎么才能解决这个问题?
注意,Point 不是一个自定义类,它来自Xna框架。我不想用: IComparer实现自定义类
发布于 2014-06-23 16:37:06
正如.NET 4.5+ @dasblinkenlight所指出的,有一种将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)); 发布于 2014-06-23 16:29:42
如果不想实现IComparer,可以使用 static method从委托创建一个 static method,如下所示:
points_.Sort(1, points_.Count()-1, Comparer.Create(MyCompare));甚至是
points_.Sort(1, points_.Count()-1, Comparer.Create((a, b) => {
... // comparison logic goes here
}));https://stackoverflow.com/questions/24370785
复制相似问题