Cette question implique 2 différentes implémentations de essentiellement le même code.avantages/inconvénients de différentes implémentations pour comparer les objets
Tout d'abord, en utilisant délégué pour créer une méthode de comparaison qui peut être utilisé comme paramètre lors du tri d'une collection d'objets:
class Foo
{
public static Comparison<Foo> BarComparison = delegate(Foo foo1, Foo foo2)
{
return foo1.Bar.CompareTo(foo2.Bar);
};
}
-je utiliser ce qui précède quand je veux avoir une façon de trier une collection de Foo objets d'une manière différente que mes offres de fonction CompareTo. Par exemple:
List<Foo> fooList = new List<Foo>();
fooList.Sort(BarComparison);
En second lieu, en utilisant IComparer:
public class BarComparer : IComparer<Foo>
{
public int Compare(Foo foo1, Foo foo2)
{
return foo1.Bar.CompareTo(foo2.Bar);
}
}
J'utilise ci-dessus quand je veux faire une recherche binaire pour un objet Foo dans une collection d'objets Foo. Par exemple:
BarComparer comparer = new BarComparer();
List<Foo> fooList = new List<Foo>();
Foo foo = new Foo();
int index = fooList.BinarySearch(foo, comparer);
Mes questions sont les suivantes:
- Quels sont les avantages et les inconvénients de chacune de ces mises en œuvre?
- Quelles sont les autres façons de tirer parti de chacune de ces implémentations?
- Est-il possible de combiner ces mises en œuvre de telle sorte que je ne ai pas besoin de dupliquer le code?
- Puis-je obtenir à la fois une recherche binaire et une collection alternatif trier par seulement 1 de ces mises en œuvre?
De bons exemples de code! –