![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
работа с элементом списка
werewolf2 © (2011-05-10 13:35:00)нужно получить из списка объект по индексу, если равен nil, создать и вернуть созданный. делаю так:
такой вариант работы с элементом списка корректный, или можно записать подругому.
function TForm1.GetLinkerItemDecoder(Index: Int): TLinkerItemDecoder;
begin
Assert((Index >= 0) and (Index <= FLinkerItems.Count));
if FLinkerItems[Index] = nil then
FLinkerItems[Index] := TLinkerItemDecoder.Create(
FConveyerLinker.Links[Index]);
Result := FLinkerItems[Index];
end;
KSergey (2011-05-10 16:30:00) [1]Выходит, FConveyerLinker.Links[] всегда такого же размера, что и FLinkerItems должен быть. Причем это не проверяется в отличии от FLinkerItems (хотя бы через Assert).
Вообще, если 2 списка строго одинакового размера параллельно ведется - я бы постарался в один список запихать структуру. А то мало ли - размерчики разъедутся и привет.
Ну это если придираться.
А какого типа FLinkerItems? если это обычный TList какой-нибудь - то Assert не нужен: внутри при доступе к элементам всегда проверяется корректность индекса.
Омлет (2011-05-10 15:42:00) [2]> Index <= FLinkerItems.Count
Может всё-таки "Index < FLinkerItems.Count"?
clickmaker (2011-05-10 13:41:00) [3]я бы так написал
Result := FLinkerItems[Index];
if Result = nil then begin
Result := TLinkerItemDecoder.Create(FConveyerLinker.Links[Index]);
FLinkerItems[Index] := Result;
end;