Diese Fragen beziehen sich auf zwei verschiedene Implementierungen von im Wesentlichen demselben Code.Vorteile/Nachteile verschiedener Implementierungen für den Vergleich von Objekten
Zuerst Delegierten mit einem Vergleichsverfahren zu schaffen, die als Parameter verwendet werden kann, wenn eine Sammlung von Objekten Sortierung:
class Foo
{
public static Comparison<Foo> BarComparison = delegate(Foo foo1, Foo foo2)
{
return foo1.Bar.CompareTo(foo2.Bar);
};
}
ich die oben verwenden, wenn ich eine Art und Weise des Sortierens eine Sammlung haben wollen Foo Objekte anders als meine CompareTo Funktion bietet. Zum Beispiel:
List<Foo> fooList = new List<Foo>();
fooList.Sort(BarComparison);
Zweitens mit IComparer:
public class BarComparer : IComparer<Foo>
{
public int Compare(Foo foo1, Foo foo2)
{
return foo1.Bar.CompareTo(foo2.Bar);
}
}
verwende ich die oben, wenn ich eine binäre Suche nach einem Foo Objekt in einer Sammlung von Foo Objekten tun will. Zum Beispiel:
BarComparer comparer = new BarComparer();
List<Foo> fooList = new List<Foo>();
Foo foo = new Foo();
int index = fooList.BinarySearch(foo, comparer);
Meine Fragen sind:
- Was sind die Vor- und Nachteile jeder dieser Implementierungen?
- Was sind weitere Möglichkeiten, um jede dieser Implementierungen zu nutzen?
- Gibt es eine Möglichkeit, diese Implementierungen so zu kombinieren, dass ich den Code nicht duplizieren muss?
- Kann ich mit nur einer dieser Implementierungen sowohl eine binäre Suche als auch eine alternative Sammlungssortierung erreichen?
Großartige Codebeispiele! –