Saturday, June 21, 2025

C# Simple Example of IComparable Part-1

Simple Example of IComparable
namespace ComparableDemo;

// Employee has Bonus
class Employee : IComparable
{
    private int _Age;
    // initialize data using CTOR
    public Employee(int id, string name, int age)
    {
        Id = id;
        Name = name;
        Age = age;
    }

    // to get data, we need properties
    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 side code:
using ComparableDemo;

// array of employees sorted by age
Employee[] employees = new Employee[5];
employees[0] = new Employee(1001,"Bhim",35);
employees[1] = new Employee(1002,"Ajay",25);
employees[2] = new Employee(1003,"Vijay",43);
employees[3] = new Employee(1004,"Rakesh",27);
employees[4] = new Employee(1005,"Mohan",22);
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-2 

C# Simple Example of IComparable Part-3

No comments:

Post a Comment

Hot Topics