Employee class
namespace ComparableDemo;
// Employee has Bonus
class Bonus
{
public Bonus(int amount)
{
Amount = amount;
}
public int Amount { get; set; }
}
internal class Employee
{
private int _Age;
// initialize data using CTOR
public Employee(int id, string name, int age, int bonus)
{
Id = id;
Name = name;
Age = age;
Bonus = new Bonus(bonus); // reference type
}
// to get data, we need properties
public Bonus Bonus { get; set; }
public int Id { get; } // read-only, Id cannot be updated
public string? Name { get; set; } // read-write, name can be updated
public int Age // read-write, age can be updated
{
get { return _Age; }
set
{
if (value < 18)
{
throw new ArgumentException("Age must be above 18");
}
else
{
_Age = value;
}
}
}
}
NameComparer class
using System.Collections;
namespace ComparableDemo;
internal class NameComparer : IComparer
{
public int Compare(object? x, object? y)
{
//step1, compare datatypes
if (x is Employee e1 && y is Employee e2)
{
return string.Compare(e1.Name, e2.Name, StringComparison.OrdinalIgnoreCase);
}
else
{
throw new ArgumentException("Employees Data required.");
}
}
}
Client class
using ComparableDemo;
// array of employees sorted by age
Employee[] employees = new Employee[5];
employees[0] = new Employee(1001,"Bhim",35,4000);
employees[1] = new Employee(1002,"Ajay",25,3500);
employees[2] = new Employee(1003,"Vijay",43,4200);
employees[3] = new Employee(1004,"Rakesh",27,3200);
employees[4] = new Employee(1005,"Mohan",22,3100);
Console.WriteLine("original array ==>");
foreach (var emp in employees)
{
Console.WriteLine($"Id {emp.Id}, Name {emp.Name}, Age {emp.Age}");
}
Array.Sort(employees, new NameComparer());
Console.WriteLine("\nsorted by Age ==>");
foreach (var emp in employees)
{
Console.WriteLine($"Age {emp.Age}, Id {emp.Id}, Name {emp.Name}");
}