Shared C# Snippet

// Program.cs
using System;
using System.Collections.Generic;
Console.WriteLine("C# Indexers Demo");
Console.WriteLine();

var team = new Team();

Console.WriteLine("1) Team indexer with int");

Console.WriteLine(team[0]);
Console.WriteLine(team[1]);
Console.WriteLine(team[2]);

team[1] = "Avto";

Console.WriteLine("After changing team[1]:");
Console.WriteLine(team[1]);

var settings = new AppSettings();

Console.WriteLine();
Console.WriteLine("2) Settings indexer with string key");

settings["theme"] = "dark";
settings["language"] = "ka";
settings["font"] = "Aptos";

Console.WriteLine(settings["theme"]); 
Console.WriteLine(settings["language"]);
Console.WriteLine(settings["font"]);

Console.WriteLine();

var days = new DaysOfWeek();

Console.WriteLine("3) Read-only indexer");

Console.WriteLine(days[0]);
Console.WriteLine(days[1]); 
Console.WriteLine(days[6]); 

Console.WriteLine();

var safeTeam = new SafeTeam();

Console.WriteLine("4) Safe indexer with validation");

Console.WriteLine(safeTeam[0]);
Console.WriteLine(safeTeam[1]);
Console.WriteLine(safeTeam[10]);

safeTeam[1] = "Dato";
safeTeam[100] = "Should not crash";

Console.WriteLine(safeTeam[1]);

Console.WriteLine();

var grades = new StudentGrades();

Console.WriteLine("5) Multiple indexers");

Console.WriteLine(grades["Math"]);
Console.WriteLine(grades["English"]);

grades["Math"] = 100;

Console.WriteLine("After changing Math grade:");
Console.WriteLine(grades["Math"]);

Console.WriteLine("Subject by index:");
Console.WriteLine(grades[0]);
Console.WriteLine(grades[1]);
Console.WriteLine(grades[2]);

Console.WriteLine();

var cart = new ShoppingCart();

Console.WriteLine("6) Realistic example: Shopping cart");

cart.Add(new CartItem("Laptop", 2500));
cart.Add(new CartItem("Mouse", 50));
cart.Add(new CartItem("Keyboard", 150));

Console.WriteLine(cart[0]);
Console.WriteLine(cart[1]);
Console.WriteLine(cart[2]);

cart[1] = new CartItem("Gaming Mouse", 120);

Console.WriteLine("After changing cart[1]:");
Console.WriteLine(cart[1]);

Console.WriteLine();

Console.WriteLine("Done!");

// Team.cs
public class Team
{
    private string[] _members = { "Gio", "Nika", "Ana" };

    public string this[int index]
    {
        get
        {
            return _members[index];
        }
        set
        {
            _members[index] = value;
        }
    }
}

// CartItem.cs
public class CartItem
{
    public string Name { get; set; }
    public decimal Price { get; set; }

    public CartItem(string name, decimal price)
    {
        Name = name;
        Price = price;
    }

    public override string ToString()
    {
        return $"{Name} - {Price} GEL";
    }
}

// ShoppingCart.cs
using System.Collections.Generic;
public class ShoppingCart
{
    private List<CartItem> _items = new List<CartItem>();

    public CartItem this[int index]
    {
        get
        {
            return _items[index];
        }
        set
        {
            _items[index] = value;
        }
    }

    public void Add(CartItem item)
    {
        _items.Add(item);
    }
}

// StudentGrades.cs
using System.Collections.Generic;
public class StudentGrades
{
    private Dictionary<string, int> _grades = new Dictionary<string, int>
    {
        { "Math", 90 },
        { "English", 85 },
        { "Physics", 95 }
    };

    private string[] _subjects = { "Math", "English", "Physics" };

    public int this[string subject]
    {
        get
        {
            return _grades[subject];
        }
        set
        {
            _grades[subject] = value;
        }
    }

    public string this[int index]
    {
        get
        {
            return _subjects[index];
        }
    }
}


// SafeTeam.cs
using System;
public class SafeTeam
{
    private string[] _members = { "Gio", "Nika", "Ana" };

    public string this[int index]
    {
        get
        {
            if (index < 0 || index >= _members.Length)
            {
                return "Invalid index";
            }

            return _members[index];
        }
        set
        {
            if (index < 0 || index >= _members.Length)
            {
                Console.WriteLine($"Cannot set value. Index {index} is invalid.");
                return;
            }

            _members[index] = value;
        }
    }
}


// DaysOfWeek.cs
public class DaysOfWeek
{
    private string[] _days =
    {
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday",
        "Sunday"
    };

    public string this[int index]
    {
        get
        {
            return _days[index];
        }
    }
}

// AppSettings.cs
using System.Collections.Generic;

public class AppSettings
{
    private Dictionary<string, string> _values = new Dictionary<string, string>();

    public string this[string key]
    {
        get
        {
            return _values[key];
        }
        set
        {
            _values[key] = value;
        }
    }
}