开发者

implementing the IComparable Interface on two string fields

How do I implement the IComparable Interface on two string fields?

Using the Person class example below. If Person objects are added to a list. How do I sort the list base开发者_运维百科d on Surname first THEN Forename?

Class Person
{
    public string Surname { get; set; }
    public string Forname { get; set; }
}

Something like? :

myPersonList.Sort(delegate(Person p1, Person p2)
{
    return p1.Surname.CompareTo(p2. Surname);
});


Or you could sort a list like this:

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;
});

Alternatively you could have Person implement IComparable<Person> with this method:

public int CompareTo(Person other)
{
    int result = this.Surname.CompareTo(other.Surname);
    if (result == 0)
        result = this.Forname.CompareTo(other.Forname);
    return result;
}

EDIT As Mark commented, you might decide you need to check for nulls. If so, you should decide whether nulls should be sorted to the top or bottom. Something like this:

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


Try this?

int surnameComparison = p1.Surname.CompareTo(p2.Surname);

if (surnameComparison <> 0)
  return surnameComparison;
else
  return p1.Forename.CompareTo(p2.Forename);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜