Delphi数组构造函数替代

时间:2019-07-17 13:34:39

标签: delphi

因此,我有一个应该调用的方法,它将数组构造函数作为参数,如下所示:

myTTable.InsertRecord([var1, var2, var3]);

问题是我设法将很多变量放入字符串params的数组中。但我似乎无法通过它作为论点。

所有这些都不起作用:

myTTable.InsertRecord(params);
myTTable.InsertRecord([params]);
myTTable.InsertRecord(Slice(params, 88)); // I know I have 88 elements

我发现的唯一方法是写:

myTTable.InsertRecord([params[0], params[1], params[2], ... params[87]]);

我不想这样做。还有另一种方法吗?

此外,我使用的是Delphi的旧版本,由于某些公司原因,我无法升级。

1 个答案:

答案 0 :(得分:2)

InsertRecord()Variant Open Arrayarray of const)作为输入。正如您已经发现的那样,在Delphi中构造这种数组的 typical 方法是在每个单独的值周围使用方括号语法。

但是,array of const实际上是array of TVarRec,您可以手动进行构建(请谨慎!因为TVarRec在如何传递某些类型(如字符串)方面有些麻烦在其中)。

例如:

procedure DoInsert(params: array of string);
var
  v: array of TVarRec;
  i: Integer;
begin
  SetLength(v, Length(params));
  for i := 0 to Length(params)-1 do
  begin
    {$IF CompilerVersion >= 20}
    // Delphi 2009 and later...
    v[i].VType := vtUnicodeString;
    v[i].VUnicodeString := Pointer(params[i]);
    {$ELSE}
    // Delphi 2007 and earlier...
    v[i].VType := vtAnsiString;
    v[i].VAnsiString := Pointer(params[i]);
    {$IFEND}
  end;
  myTTable.InsertRecord(v);
end;

var
  params: array of String;
begin
  SetLength(params, 88);
  // populate params as needed...
  DoInsert(params);
end;