У меня есть универсальный класс
class UnmanagedArray<T> where T: struct
{
IntPtr _backing; // unmanaged memory
// some constructors and others methods
// very slow but I don't care
public T this[int index]
{
get
{
int elementSize = Marshal.SizeOf(default(T));
byte* ptr = ((byte*)tab) + index * elementSize;
T result = default(T);
var handle = GCHandle.Alloc(result, GCHandleType.Pinned);
byte* result_ptr = (byte*) handle.AddrOfPinnedObject();
for(int k = 0; k < elementSize; ++k)
{
result_ptr[k] = ptr[k];
}
handle.Free();
return result;
}
}
}
Теперь я хотел бы изменить элементы в моем массиве.Что-то вроде
myArray[i].prop = 12;
Я не могу этого сделать, потому что
не может изменить возвращаемое значение Array.this [int], поскольку оно не является переменной.
Я полностью понимаю ошибку, поскольку T
является ValueType, поэтому неизменным (возвращается копией).
Есть ли способ сделать ref return
в моем свойстве индексатора?
PS: T
не может быть ссылочным типом.Это должен быть ValueType.