class Person : IComparable<Person>
{
public string
FirstName { get; set; }
public string LastName
{ get; set; }
public DateTime BirthDate { get; set; }
public int Age
{
get
{
var today = DateTime.Today;
var age = today.Year - BirthDate.Year;
return BirthDate > today.AddYears(-age) ? --age : age;
}
}
public override string
ToString()
{
return $"{Age}) {FirstName} {LastName}";
}
public int
CompareTo(Person other)
{
return Age - other.Age;
}
}
- a negative int: which means that the other person is has a higher age and will be to the right of the current person
- a zero: which mean that the two people are of equal age and will be next to each other
- a positive int: meaning that the other person is younger and will be to the left of the current Person.
Now let's demonstrate the IComparable interface in action
using System;
using System.Collections.Generic;
namespace pc.IComparable
{
class Person : IComparable<Person>
{
public string
FirstName { get; set; }
public string LastName
{ get; set; }
public DateTime BirthDate { get; set; }
public int Age
{
get
{
var today = DateTime.Today;
var age = today.Year - BirthDate.Year;
return BirthDate > today.AddYears(-age) ? --age : age;
}
}
public override string
ToString()
{
return $"{Age}) {FirstName} {LastName}";
}
public int
CompareTo(Person other)
{
return Age - other.Age;
}
}
class Program
{
static void Main(string[] args)
{
var p1 = new Person { FirstName = "Tomek", LastName = "Chooch",
BirthDate = new DateTime(1988, 8, 28) };
var p2 = new Person { FirstName = "Pawel", LastName = "Chooch",
BirthDate = new DateTime(1984, 6, 28) };
var p3 = new Person { FirstName = "Marin", LastName = "Smartz",
BirthDate = new DateTime(1983, 11, 3) };
var p4 = new Person { FirstName = "Magda", LastName = "Chooch",
BirthDate = new DateTime(1984, 1, 31) };
var p5 = new Person { FirstName = "Jakeb", LastName = "Tywonk",
BirthDate = new DateTime(1988, 5, 4) };
var p6 = new Person { FirstName = "Ivanp", LastName = "endasd",
BirthDate = new DateTime(1986, 3, 3) };
var p7 = new Person { FirstName = "Jakes", LastName = "gadicd",
BirthDate = new DateTime(1986, 3, 2) };
var p8 = new Person { FirstName = "Bober", LastName = "asdasd",
BirthDate = new DateTime(1986, 3, 1) };
var ppl = new List<Person>(new Person[] { p1, p2, p3, p4, p5, p6, p7, p8
});
ppl.Sort();
foreach (var p in ppl)
Console.WriteLine(p.ToString());
}
}