如何在两个字符串字段上实现IComparable接口?
使用下面的Person类示例。如果将Person对象添加到列表中。如何根据Surname first THEN Forename对列表进行排序?
Class Person
{
public string Surname { get; set; }
public string Forname { get; set; }
}
有点像? :
myPersonList.Sort(delegate(Person p1, Person p2)
{
return p1.Surname.CompareTo(p2. Surname);
});
答案 0 :(得分:11)
或者你可以对这样的列表进行排序:
myPersonList.Sort(delegate(Person p1, Person p2)
{
int result = p1.Surname.CompareTo(p2.Surname);
if (result == 0)
result = p1.Forname.CompareTo(p2.Forname);
return result;
});
或者,您可以使用此方法Person
实施IComparable<Person>
:
public int CompareTo(Person other)
{
int result = this.Surname.CompareTo(other.Surname);
if (result == 0)
result = this.Forname.CompareTo(other.Forname);
return result;
}
编辑正如Mark所说,您可能决定需要检查空值。如果是这样,您应该决定是否应该将空值分类到顶部或底部。像这样:
if (p1==null && p2==null)
return 0; // same
if (p1==null ^ p2==null)
return p1==null ? 1 : -1; // reverse this to control ordering of nulls
答案 1 :(得分:1)
试试这个?
int surnameComparison = p1.Surname.CompareTo(p2.Surname);
if (surnameComparison <> 0)
return surnameComparison;
else
return p1.Forename.CompareTo(p2.Forename);