public class Person : IComparable, ICloneable
{
public Person()
{
}
public Person(string firstName, string lastName)
{
this.FirstName = firstName;
this.LastName = lastName;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public override string ToString()
{
return String.Format("{0} {1}", FirstName, LastName);
}
#region IComparable Members
public int CompareTo(object obj)
{
Person other = obj as Person;
return this.LastName.CompareTo(other.LastName);
}
#endregion
#region ICloneable Members
public object Clone()
{
return new Person(FirstName, LastName);
}
#endregion
}
public class PersonComparer : IComparer
{
public enum PersonCompareType
{
FirstName,
LastName
}
private PersonCompareType compareType;
public PersonComparer(PersonCompareType compareType)
{
this.compareType = compareType;
}
#region IComparer Members
public int Compare(object x, object y)
{
Person p1 = x as Person;
Person p2 = y as Person;
switch (compareType)
{
case PersonCompareType.FirstName:
return p1.FirstName.CompareTo(p2.FirstName);
case PersonCompareType.LastName:
return p1.LastName.CompareTo(p2.LastName);
default:
throw new ArgumentException("unexpected compare type");
}
}
#endregion
}
public static class ShotingDemo
{
public static void SortStringArray()
{
string[] names = { "Christina Aguillera", "Shakira", "Beyonce", "Gwen Stefani" };
Array.Sort(names);
foreach (string name in names)
{
Console.WriteLine(name);
}
}
public static void SortPersonArray()
{
Person[] persons = {
new Person("Emerson", "Fittipaldi"),
new Person("Niki", "Lauda"),
new Person("Ayrton", "Senna"),
new Person("Michael", "Schumacher")
};
Array.Sort(persons);
foreach (Person person in persons)
{
Console.WriteLine(person.ToString());
}
}
public static void SortPersonArrayUsingComparer()
{
Person[] persons = {
new Person("Emerson", "Fittipaldi"),
new Person("Niki", "Lauda"),
new Person("Ayrton", "Senna"),
new Person("Michael", "Schumacher")
};
Array.Sort(persons, new PersonComparer(PersonComparer.PersonCompareType.LastName));
foreach (Person p in persons)
{
Console.WriteLine(p);
}
}
}
浙公网安备 33010602011771号