我有一种情况,我的所有列表成员都具有相同的 ID(ID 是字符串而不是整数)。作为业务规则的一部分,我需要按升序对列表进行排序。我的原始实现与下面非常相似。我希望在应用排序后得到不变的列表,因为所有列表成员都具有相同的 ID,但令我惊讶的是结果不同。
以下是我在排序之前的原始列表。
Id:D1.2 名称:Pachycephalosaurus
Id:D1.2 名称:Amargasaurus
Id:D1.2 名称:Mamenchisaurus
Id:D1.2 名称:恐爪龙
Id:D1.2 名称:腔骨龙
Id:D1.2 名称:偷蛋龙
Id: D1.2 名称:暴龙
使用备用比较器排序:
Id:D1.2 名称:Pachycephalosaurus
Id:D1.2 名称:偷蛋龙
Id:D1.2 名称:腔骨龙
Id:D1.2 名称:恐爪龙
Id:D1.2 名称:Mamenchisaurus
Id:D1.2 名称:Amargasaurus
Id: D1.2 名称:暴龙
代码
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; }
}