【发布时间】:2020-05-22 09:06:06
【问题描述】:
我正在尝试将 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), High(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'
【问题讨论】:
标签: delphi generics delphi-xe7 variant