To pytanie dotyczy 2 różnych implementacji zasadniczo tego samego kodu.Zalety/Wady różnych implementacji porównywania obiektów
pierwsze, używając delegata stworzyć metodę porównania, które mogą być używane jako parametr przy sortowaniu kolekcji obiektów:
class Foo
{
public static Comparison<Foo> BarComparison = delegate(Foo foo1, Foo foo2)
{
return foo1.Bar.CompareTo(foo2.Bar);
};
}
używam powyżej, gdy chcę mieć sposób sortowania kolekcję Obiekty Foo w inny sposób niż oferuje moja funkcja CompareTo. Na przykład:
List<Foo> fooList = new List<Foo>();
fooList.Sort(BarComparison);
drugie, używanie IComparer:
public class BarComparer : IComparer<Foo>
{
public int Compare(Foo foo1, Foo foo2)
{
return foo1.Bar.CompareTo(foo2.Bar);
}
}
używam powyższe gdy chcę zrobić binarną poszukiwania obiektu Foo w zbiorze obiektów Foo. Na przykład:
BarComparer comparer = new BarComparer();
List<Foo> fooList = new List<Foo>();
Foo foo = new Foo();
int index = fooList.BinarySearch(foo, comparer);
moje pytania są następujące:
- Jakie są wady i zalety każdego z tych wdrożeń?
- Jakie są inne sposoby wykorzystania każdej z tych implementacji?
- Czy istnieje sposób połączenia tych implementacji w taki sposób, że nie muszę duplikować kodu?
- Czy mogę uzyskać zarówno wyszukiwanie binarne, jak i alternatywny sortowanie kolekcji przy użyciu tylko jednej z tych implementacji?
Świetne przykłady kodu! –