У меня есть этот код, который не компилируется:Как иметь дело с открытым массивом TControls
function IsControlOneOf(AControl: TControl; AControls: array of TControl): Boolean;
begin
Result := False;
// if AControls <> nil then // does not compile!
if Length(AControls) <> 0 then // this compiles
Result := AControl in AControls; // does not compile!
end;
Я, вероятно спутать динамический массив с открытым массивом.
Как я могу проверить это "AControl in AControls"
? Должен ли я перебирать Low (AControls) в High (AControls) и проверять соответствие, или что?
Также есть способ установить значение по умолчанию для открытого массива?
AControls: array of TControl = []
Не компилируется.
Лучше использовать 'TList' для этой коллекции. Вы реализуете функцию 'IsControlOneOf' с помощью одной строки, например' Result: = AControls.IndexOf (AControl) <> -1; '. За исключением того, что вы получите преимущества от простых операций, таких как вставка, удаление и т. Д. – TLama
@TLama, я подумал об этом. но TList нужно создавать и создавать каждый раз, когда я передаю его функции, что является излишним я думаю ... – ZigiZ
@TLama, что означает, что вы не можете использовать, например, конструкторы открытого массива –