J'ai un problème avec la façon dont la méthode de tri par liste gère le tri. Compte tenu de l'élément suivant:Pourquoi la méthode <T> .Sort réorganiser égale IComparable <T> éléments?
class Element : IComparable<Element>
{
public int Priority { get; set; }
public string Description { get; set; }
public int CompareTo(Element other)
{
return Priority.CompareTo(other.Priority);
}
}
Si j'essaie de trier cette façon:
List<Element> elements = new List<Element>()
{
new Element()
{
Priority = 1,
Description = "First"
},
new Element()
{
Priority = 1,
Description = "Second"
},
new Element()
{
Priority = 2,
Description = "Third"
}
};
elements.Sort();
Ensuite, le premier élément est l'élément précédemment deuxième « deuxième ». Ou, en d'autres termes, cette assertion échoue:
Assert.AreEqual("First", elements[0].Description);
Pourquoi .NET ReOrdering ma liste lorsque les éléments sont essentiellement les mêmes? Je voudrais seulement réorganiser la liste si la comparaison renvoie une valeur non nulle.
Demande de fonctionnalité pour une méthode de tri stable https://github.com/dotnet/corefx/issues/4696 –