Как изменить индекс, к которому осуществляется доступ в массиве - PullRequest
0 голосов
/ 10 июля 2020

Скажем, у меня есть 2 массива: один

protected byte[] _ROM;

И другой

public byte[] ROM => _ROM;

Что, если бы я хотел сделать это так: когда я пытаюсь получить / установить значение в ROM (и если определенное значение bool истинно), оно добавляет 0x200 (десятичное 512) к запрашиваемому индексу, то есть своего рода

return Boolvar ? ROM[i+0x200] : ROM[i]

в геттере / сеттере .

Но я не знаю, как получить доступ к указанному индексу в геттере / сеттере, поэтому я не могу изменить его перед возвратом ...

1 Ответ

1 голос
/ 10 июля 2020

Объявите класс-оболочку, который обрабатывает косвенное обращение, например:

public class RomRedirector
{
    private readonly byte[] _rom;

    internal RomRedirector(byte[] rom) => _rom = rom;

    public byte this[int index]
    {
        get => _rom[Redirect(index)];
        set => _rom[Redirect(index)] = value;
    }

    private int Redirect(int index) => Boolvar ? index + 0x200 : index;
    //                                   ^
    //                   this one needs to be rewritten/declared

    // add extra methods that you need from the array
}

Затем используйте его вместо этого в родительском классе:

public RomRedirector ROM { get; }

ROM = new RomRedirector(_ROM);
...