自定义排序(三个领域的IComparer)

我有一个人类,有三个字段,标题,名称,性别,我想为它创建一个自定义排序,首先按标题排序,然后按名称排序,然后按性别升序排序:

public class SortPerson : IComparer { public int Compare(object x, object y) { (…) } } 

我知道如何只为一个变量进行比较而不是这样做:但我如何才能继续进行三次?

 public class SortPerson : IComparer { int IComparer.Compare(object a, object b) { Person p1=(Person)a; Person p2=(Person)b; if (p1.Title > p2.Title) return 1; if (p1.Title < p2.Title) return -1; else return 0; } } 

非常感谢,

 //Assuming all the fields implement IComparable int result = a.field1.CompareTo(b.field1); if (result == 0) result = a.field2.CompareTo(b.field2); if (result == 0) result = a.field3.CompareTo(b.field3); return result; 

我不知道你对比较器有什么用处,但也许你可以使用“order by”LINQ语句代替比较器,它允许按各种字段排序:

 var orderedListPersons = from p in listPersons orderby p.Title, p.Name, p.Gender select person; 

将以您想要的方式订购listPersons。 您也可以使用LINQ OrderBy和ThenBy方法使用不同的语法进行相同的操作:

 var orderedlistPersons = listPersons.OrderBy(p => p.Title).ThenBy(p => p.Name).ThenBy(p => p.Gender); 

按优先顺序一次按一个字段排序,如果前一个字段比较结果为0(字段相等),则仅继续到下一个字段。 有关2字段排序的示例,请参阅以下内容。

http://csharp.2000things.com/2010/10/30/135-implementing-icomparable-to-allow-sorting-a-custom-type/