如何修改数组中正在访问的索引

How to modify index being accessed in an array

编辑:在我的例子中,只检查 bool 值更容易,如果它是真的,只需从数组中删除第一个 0x200(十进制 512)字节,这样以后就不需要访问数组了担心它,基本上意味着如果 bool "Skiphex200bytes" 为真,我会从数组的开头删除 0x200 字节,而不是必须即时修改正在访问的索引。 我会保留这个问题和我声明为正确的答案,因为如果有人决定做类似的事情,它仍然是有用的信息。


假设我有 2 个数组: 一个是

protected byte[] _ROM;

另一个是

public byte[] ROM => _ROM;

如果我想这样做怎么办:当我尝试 get/set ROM 中的一个值时,(如果某个布尔值为真)它会添加 0x200(十进制) 512) 到被请求的索引,也就是一种

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

在 getter/setter.

但我不知道如何访问 getter/setter 中的索引,所以我无法在返回之前修改它...

声明一个包装器 class 来处理间接寻址,例如:

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
}

然后在您的 parent class:

中使用这个
public RomRedirector ROM { get; }

ROM = new RomRedirector(_ROM);