Example: The following code defines Employee class which implements IComparable. The CompareTo(Object? obj) method compares current this employee object with the employee object passed as argument to CompareTo method.Code inside Main method: Five employee objects are elements of employees array. This array is passed to Array.Sort<T>(T[] array) static method. The Sort method sorts the elements in an entire System.Array using the System.IComparable. OUTPUT
// Employee has Bonus
class Bonus
{
public Bonus(int amount)
{
Amount = amount;
}
public int Amount { get; set; }
}
internal class Employee : IComparable
{
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;
}
}
}
public int CompareTo(object? obj)
{
if (obj is Employee emp)
{
if (this.Age > emp.Age)
{
return 1;
}
else if (this.Age < emp.Age)
{
return -1;
}
else
{
return 0;
}
}
else
{
throw new Exception("Invalid Data");
}
}
}
// employees data
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); // sorts employees by age
Console.WriteLine("\nsorted by Age ==>");
foreach (var emp in employees)
{
Console.WriteLine($"Age {emp.Age}, Id {emp.Id}, Name {emp.Name}");
}original array ==>
Id 1001, Name Bhim, Age 35
Id 1002, Name Ajay, Age 25
Id 1003, Name Vijay, Age 43
Id 1004, Name Rakesh, Age 27
Id 1005, Name Mohan, Age 22
sorted by Age ==>
Age 22, Id 1005, Name Mohan
Age 25, Id 1002, Name Ajay
Age 27, Id 1004, Name Rakesh
Age 35, Id 1001, Name Bhim
Age 43, Id 1003, Name Vijay
No comments:
Post a Comment