如何修改数组中正在访问的索引
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);
编辑:在我的例子中,只检查 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);