我正在尝试将array of T
转换为Variant
(varArray
)。
对于非通用类型(即Integer
),我正在使用以下函数:
function ToVarArray(AValues : array of Integer) : Variant;
var
i : integer;
begin
Result := VarArrayCreate(
[Low(AValues),High(AValues)],varInteger
);
for i := Low(AValues) to High(AValues) do
Result[i] := AValues[i];
end;
在尝试使用通用TArray
做同样的事情时遇到了一些问题:
uses
System.Generics.Collections;
type
TArray = class(System.Generics.Collections.TArray)
public
class function ToVarArray<T>(const AValues: array of T) : Variant; static;
end;
我尝试了以下操作:
class function TArray.ToVarArray<T>(const AValues: array of T) : Variant;
var
i : integer;
Tmp : T;
begin
Result := Tmp;
Result := VarArrayCreate(
[Low(AValues),VarType(Result)
);
for i := Low(AValues) to High(AValues) do
Result[i] := AValues[i];
end;
但是在我将T
分配给Variant
的每一行都会产生以下编译错误:
[dcc32错误] Unit1.pas(36):E2010不兼容的类型:'Variant'和 'T'