这个问题涉及基本相同代码的2种不同实现.
首先,使用委托创建一个比较方法,该方法可以在排序对象集合时用作参数:
class Foo
{
public static Comparison<Foo> BarComparison = delegate(Foo foo1, Foo foo2)
{
return foo1.Bar.CompareTo(foo2.Bar);
};
}
Run Code Online (Sandbox Code Playgroud)
当我想要一种以与CompareTo函数提供的方式不同的方式对Foo对象的集合进行排序时,我使用上述方法.例如:
List<Foo> fooList = new List<Foo>();
fooList.Sort(BarComparison);
Run Code Online (Sandbox Code Playgroud)
二,使用IComparer:
public class BarComparer : IComparer<Foo>
{
public int Compare(Foo foo1, Foo foo2)
{
return foo1.Bar.CompareTo(foo2.Bar);
}
}
Run Code Online (Sandbox Code Playgroud)
当我想在Foo对象的集合中对Foo对象进行二进制搜索时,我使用上面的代码.例如:
BarComparer comparer = new BarComparer();
List<Foo> fooList = new List<Foo>();
Foo foo = new Foo();
int index = fooList.BinarySearch(foo, comparer);
Run Code Online (Sandbox Code Playgroud)
我的问题是: