Saturday, June 21, 2025

C# Simple Example of IComparer Part-1

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

C# Simple Example of IComparable Part-2

Code:
namespace ComparableDemo;

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

}
Client Code:
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);
Console.WriteLine("\nsorted by Age ==>");
foreach (var emp in employees)
{
    Console.WriteLine($"Age {emp.Age}, Id {emp.Id}, Name {emp.Name}");
}
C# Simple Example of IComparable Part-1

 C# Simple Example of IComparable Part-3

Hot Topics