创建 TPair TArray 的编译器错误

Compiler error creating TPair TArray

uses
  Generics.Collections, types, rtti, System.Generics.Collections;

procedure GimmePairArray(const APairArray: TArray<TPair<string, TValue>>);
begin

end;

procedure TForm2.FormCreate(Sender: TObject);
var
  _PairArray: TArray<TPair<string, TValue>>;
begin
  _PairArray := TArray <TPair<string, TValue>>.Create(TPair<'"reset changes"', TValue.From<Boolean>(True)>);
  GimmePairArray(_PairArray);
end;

导致编译错误: [DCC 错误]Unit2.pas(38):E2003 未声明的标识符:'TPair' 我做错了什么? TPair 在 System.Generics.Collections 中声明,我在我的使用中有它。

首先,编译器说TPair不存在。尽管您不相信编译器是正确的。 TPair<K, V> 存在,但 TPair 不存在。

编译器确实指出了您的问题。如果您指出编译失败的程序行会很有帮助,但很明显,这段代码就是问题所在:

TPair<'"reset changes"', TValue.From<Boolean>(True)>

这是语法错误。你是说:

TPair<string, TValue>.Create('"reset changes"', TValue.From<Boolean>(True))

编译器查看您的代码并尝试确定 < 是否是泛型类型表达式的一部分。因为 < 右边的表达式不是一个类型,所以它得出的结论是 let 不是并且你的 < 是小于比较运算符。当然,它会说 TPair 不存在。事实并非如此,正如顶部所解释的那样。