我继承了这段代码:
var
FSavedRecords : Variant; { actually, a private property in an ancestor }
lFieldsArray : Variant;
lClientDataSet: TClientDataSet;
FSavedRecords := VarArrayCreate([0, lCount], varVariant);
for lRow := 0 to lCount do
begin
FSavedRecords[lRow] := VarArrayCreate([0, lClientDataSet.FieldCount-1], varVariant);
with lClientDataSet do
begin
lFieldsArray := FSavedRecords[lRow];
if <SomeCondition> then
put lClientDataSet field values into lFieldsArray
由于条件并不总是正确,我最终在 FSavedRecords 中得到少于 lCount(+1) 个元素。
我当然可以计算那些(比如:lNrOutput),但不能做一个SetLength(FSavedRecords,lNrOutput)
('常量对象不能作为 var 参数传递')。
如果不能使用 SetLength(),我假设我可以使用 DynArrayFromVariant将变量数组转换为动态的“变量数组”并在其上使用 SetLength,但这具有额外复制操作的缺点。我想重新使用祖先表单中的私有 FSavedRecords,它在程序的其他地方用于相同的目的。
有没有更好的出路?