Как правильно связать ссылки в списке?

124
07 июня 2021, 05:30

С указателями на объекты все проще, но вот с ссылками у меня не выходит правильно организовать их связь.

Кусок кода который связывал объекты через указатели:

// получили указатель на указатель на первый элемент
AviChunk** ppAppend = &pRoot->Common.First;
for (;;)
{
    AviChunk* pCk = Memory.Instance.CAlloc<AviChunk>();
    if (pCk == null)
    {
        return Result.Generic;
    }
    if (ChunkRead(pCk, pRoot) != 0)
    {
        ChunkClean(pCk);
        Memory.Instance.Free(&pCk);
        break;
    }
    // указали что первым будет `pCk`
    *ppAppend = pCk;
    // разыменовали `ppAppend`, проверили на `null`
    while (*ppAppend != null)
    {
        // Переписали указатель на `ppAppend` на следующий элемент
        ppAppend = &(*ppAppend)->Common.Next;
        // пошли дальше по циклу
    }
   ...
}

Но когда я попробовал сделать тоже самое с ссылками:

IChunk append = container.First;
for (;;)
{
    if (chunk == null)
    {
        return ReadResult.Generic;
    }
    result = chunk.Read(stream, container);
    if(result != ReadResult.Ok)
    {
        if (result != ReadResult.ZeroSized)
        {
            break;
        }
    }
    container.First = chunk;
    while (append != null)
    {
        append = append.Next; // BUG: Need to check!
    }
    ...
}

То такое не прокатило.

Подскажите, как правильно связывать списки через ссылки?

Интерфейс списка:

public interface IChunk
{
    uint Fcc { get; set; }
    ulong Size { get; set; }
    ulong Position { get; set; }
    IChunk Next { get; set; }
    IChunk Parent { get; set; }
    IChunk First { get; set; }
    ulong End { get; }
    IChunk Find(uint fcc, int number, bool isList);
    T Find<T>(uint fcc, int number, bool isList) where T : IChunk;
    void DumpDebug(int level = 0);
    ReadResult ToNext(Stream stream);
    ReadResult BeginRead();
    ReadResult Read(Stream stream, IChunk parent);
    ReadResult Read(Stream stream);
}
READ ALSO
Этапы создания компьютерной игры на Unity

Этапы создания компьютерной игры на Unity

Пишу компьютерную игру, но не знаю чего не хватает, тк

75
Права пользователя в телеграм боте (C#)

Права пользователя в телеграм боте (C#)

Делаю телеграм ботаНадо создать права для каждого пользователя, к примеру чтобы пользователь не мог перейти из главного меню в другое просто...

380
UWP подключение к SQL

UWP подключение к SQL

Есть приложение WPF, которое работает с базой данных SQLВ App

195
Mysql выборка при совпадении в нескольких строках

Mysql выборка при совпадении в нескольких строках

Нужно выбрать id товарв у которого option_id(13) = value(3G) и option_id(57) = value(2 ГБ)

76