Как перегрузить оператор [] в С#

Я хотел бы добавить оператор в класс. В настоящее время у меня есть метод GetValue(), который я хотел бы заменить оператором [].

class A
{
    private List<int> values = new List<int>();

    public int GetValue(int index) => values[index];
}

Ответ 1

public int this[int key]
{
    get => GetValue(key);
    set => SetValue(key, value);
}

Ответ 2

Я считаю, что это то, что вы ищете:

Индексаторы (Руководство по программированию в С#)

class SampleCollection<T>
{
    private T[] arr = new T[100];
    public T this[int i]
    {
        get => arr[i];
        set => arr[i] = value;
    }
}

// This class shows how client code uses the indexer
class Program
{
    static void Main(string[] args)
    {
        SampleCollection<string> stringCollection = 
            new SampleCollection<string>();
        stringCollection[0] = "Hello, World";
        System.Console.WriteLine(stringCollection[0]);
    }
}

Ответ 3

Оператор [] называется индексатором. Вы можете предоставить индексаторы, которые принимают целое число, строку или любой другой тип, который вы хотите использовать в качестве ключа. Синтаксис прост и соответствует тем же принципам, что и методы доступа к свойствам.

Например, в вашем случае, когда int является ключом или индексом:

public int this[int index]
{
    get => GetValue(index);
}

Вы также можете добавить набор средств доступа, чтобы индексатор стал доступен для чтения и записи, а не только для чтения.

public int this[int index]
{
    get => GetValue(index);
    set => SetValue(index, value);
}

Если вы хотите индексировать другим типом, просто измените подпись индексатора.

public int this[string index]
...

Ответ 4

public int this[int index]
{
    get => values[index];
}