вернуть общую ссылку из неуправляемой памяти - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть универсальный класс

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...