0

编辑:在我的情况下,检查 bool 值更容易,如果它是真的,只需从数组中删除前 0x200(十进制 512)字节,这样以后对数组的任何访问都不需要担心它,基本上意味着如果布尔“Skiphex200bytes”为真,我会从数组的开头删除 0x200 字节,而不必修改正在动态访问的索引。我会保留这个问题和我宣布正确的答案,因为如果有人决定做类似的事情,它仍然是有用的信息。


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

protected byte[] _ROM;

另一个是

public byte[] ROM => _ROM;

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

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

在 getter/setter 中。

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

4

1 回答 1

1

声明一个处理间接的包装类,例如:

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);
于 2020-07-10T13:14:03.657 回答