J'ai une liste d'un objet qui doit être trié en fonction de trois propriétés différentes de l'objet.
Exemple la liste d'extrémité doit être des objets avec de la propriété1 = true suivi par des objets avec property2 = true suivi par des objets avec la propriété3 = true p> p>
5 Réponses :
Pourquoi ne pas utiliser LINQ?
var orderedList = ListObj.OrderByDescending(x => x.Property1) .ThenByDescending(x => x.Property2);
@Obalix: Quel est le bon tri indiqué par l'OP? Il indique deux possibilités ... Son code indique à une seule possibilité, tandis que le texte après son code indique une autre. Et au fait, c'est vrai vient après FALSE avec un simple ordre. OrderbyDescendant rend vrai vient en premier.
Votre propre titre dit déjà tout: implémentez un Icomarer
var orderedItems = ListObj.OrderBy(obj => obj, customComparer);
Ceci devrait fournir le tri requis (selon le code, pas l'instruction ci-dessous).
ListObj.Where(x => x.Property1 == true) .Concat(ListObj.Where(x => x.Property1 == false && x.Property2 == false)) .Concat(ListObj.Where(x => x.Property2 == true));
Vous pouvez rendre les choses pour vous-même si vous définissez ce type:
public class ComparisonComparer<T> : IComparer<T> { private readonly Comparison<T> _comparison; public ComparisonComparer(Comparison<T> comparison) { _comparison = comparison; } public int Compare(T x, T y) { return _comparison(x, y); } }
Je pense que vous voulez définir une fonction de comparaison dans laquelle vous pouvez déterminer le rang entre 2 éléments de la liste.
List<Object1> foo = new List<Object1>() { <items...> }; foo.Sort(CompareObject1);
En fait, c'est un peu peu clair. Je pensais que les articles avec la propriété3 peuvent aller n'importe où?
Je pense que je l'ai fait maintenant ... J'ai changé ma réponse ci-dessous pour mieux refléter la situation.
Il n'est pas clair, car il y a une question de priorité. Le code lit une manière (fin de la liste remplace le devant de la liste), mais je soupçonne que vous signiez cela l'autre moyen (avant de la liste remplace la fin de la liste)
L'ordre des objets avec la propriété3 comme vrai n'a pas d'importance, mais des objets avec la propriété1 devraient toujours aller avant la propriété2