С указателями на объекты все проще, но вот с ссылками у меня не выходит правильно организовать их связь.
Кусок кода который связывал объекты через указатели:
// получили указатель на указатель на первый элемент
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);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Делаю телеграм ботаНадо создать права для каждого пользователя, к примеру чтобы пользователь не мог перейти из главного меню в другое просто...
Нужно выбрать id товарв у которого option_id(13) = value(3G) и option_id(57) = value(2 ГБ)