这个问题涉及基本上相同的代码的2个不同的实现。比较对象的不同实现的优点/缺点
首先,使用委托创建一个比较方法,可以分选对象的集合时,可以用作一个参数:
class Foo
{
public static Comparison<Foo> BarComparison = delegate(Foo foo1, Foo foo2)
{
return foo1.Bar.CompareTo(foo2.Bar);
};
}
我使用以上时,我想有排序的集合的一种方式Foo对象的方式与我的CompareTo函数不同。例如:
List<Foo> fooList = new List<Foo>();
fooList.Sort(BarComparison);
其次,使用的IComparer:
public class BarComparer : IComparer<Foo>
{
public int Compare(Foo foo1, Foo foo2)
{
return foo1.Bar.CompareTo(foo2.Bar);
}
}
我用上面的时候我希望做的Foo对象的集合在一个Foo对象二进制搜索。例如:
BarComparer comparer = new BarComparer();
List<Foo> fooList = new List<Foo>();
Foo foo = new Foo();
int index = fooList.BinarySearch(foo, comparer);
我的问题是:
- 各有什么这些实现的优点和缺点?
- 有什么更多的方式来利用每个这些实现?
- 有没有一种方法可以将这些实现组合起来,使得我不需要复制代码?
- 我是否可以仅使用其中一种实现来实现二分搜索和另一种集合排序?
伟大的代码示例! – 2010-03-21 19:23:49