Эти вопросы включают в себя две различные реализации по существу одного и того же кода.Преимущества/Недостатки различных реализаций для сравнения объектов
Во-первых, с помощью делегата создать метод сравнения, который может быть использован в качестве параметра при сортировке коллекции объектов:
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);
Мои вопросы:
- Каковы преимущества и недостатки каждого из этих реализаций?
- Какие еще способы использовать преимущества каждой из этих реализаций?
- Есть ли способ объединить эти реализации таким образом, что мне не нужно дублировать код?
- Могу ли я получить как двоичный поиск, так и альтернативную сортировку, используя только одну из этих реализаций?
Отличные примеры кода! –