У меня есть ситуация, когда все члены моего списка имеют одинаковый идентификатор (идентификатор - строка, а не целое число).В рамках бизнес-правил мне нужно отсортировать список в порядке возрастания.Моя оригинальная реализация очень похожа на ниже.Я ожидал получить неизменный список после применения сортировки, поскольку все члены списка имеют одинаковые идентификаторы, но, к моему удивлению, результат отличается.
Ниже приведен мой оригинальный список перед сортировкой.
Id: D1.2 Имя: Pachycephalosaurus
Id: D1.2 Имя: Amargasaurus
Id: D1.2 Имя: Mamenchisaurus
Id: D1.2 Имя: Deinonychus
Id: D1.2 Имя: Coelophysis
Идентификатор: D1.2 Имя: Овираптор
Идентификатор: D1.2 Имя: Тиранозавр
Сортировка с альтернативным компаратором:
Идентификатор: D1.2 Имя: Pachycephalosaurus
Id: D1.2 Имя: Oviraptor
Id: D1.2 Имя: Coelophysis
Id: D1.2 Имя: Deinonychus
Id: D1.2 Имя: Mamenchisaurus
Id: D1.2Имя: Amargasaurus
Id: D1.2 Имя: Tyrannosaur
Код
class Program
{
static void Main(string[] args)
{
new ComparerIssue().MainMethod();
Console.ReadKey();
}
}
internal class DinoComparer : IComparer<Dinosaur>
{
public int Compare(Dinosaur dinosaur1, Dinosaur dinosaur2)
{
return Compare(dinosaur1.Id, dinosaur2.Id);
}
private int Compare(string x, string y)
{
if (x == y)
{
return 1; //I have tried using 1 and 0; -1 throws exception
}
return x.CompareTo(y);
}
}
public class ComparerIssue
{
public void MainMethod()
{
List<Dinosaur> dinosaurs = new List<Dinosaur>();
dinosaurs.Add(new Dinosaur() { Id = "D1.2", Name = "Pachycephalosaurus" });
dinosaurs.Add(new Dinosaur() { Id = "D1.2", Name = "Amargasaurus" });
dinosaurs.Add(new Dinosaur() { Id = "D1.2", Name = "Mamenchisaurus" });
dinosaurs.Add(new Dinosaur() { Id = "D1.2", Name = "Deinonychus" });
dinosaurs.Add(new Dinosaur() { Id = "D1.2", Name = "Coelophysis" });
dinosaurs.Add(new Dinosaur() { Id = "D1.2", Name = "Oviraptor" });
dinosaurs.Add(new Dinosaur() { Id = "D1.2", Name = "Tyrannosaur" });
Display(dinosaurs);
DinoComparer dc = new DinoComparer();
Console.WriteLine("\nSort with alternate comparer:");
dinosaurs.Sort(dc);
Display(dinosaurs);
}
private static void Display(IEnumerable<Dinosaur> list)
{
Console.WriteLine();
foreach (Dinosaur dinosaur in list)
{
Console.WriteLine("Id: " + dinosaur.Id + " Name: " + dinosaur.Name);
}
}
}
public class Dinosaur
{
public string Id { get; set; }
public string Name { get; set; }
}