Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работа с элементом списка


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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо