Доступ к указателю / ссылке this с помощью индексатора в C#
Я экспериментирую с структурой данных для критической части производительности / памяти в нашей кодовой базе. Я хотел бы иметь быстрый доступ к байтам, определенным в структуре. Однако я не уверен, как получить доступ к структуре, на которой я работаю, используя индексатор.
[Serializable]
[StructLayout(LayoutKind.Sequential)]
public struct Foo
{
[SerializeField]
private byte a, b, c;
public unsafe byte this[byte index]
{
get
{
//omitted safety checks
//this is a no, no
byte* addr = (byte*)&this;
return addr[index];
}
}
}
1 ответ
Решение
Вы можете делать только то, что вы пытаетесь сделать внутри fixed
блок, то есть:
fixed (Foo* foo = &this)
{
byte* addr = (byte*)foo;
return addr[index];
}