如何在Delphi中用字符串常量构建常量泛型字符串数组?
解决Delphi中用单独字符串常量构建数组常量的问题
你遇到的Constant expression expected错误,是因为TArray<String>属于动态数组类型,Delphi编译器不允许用已定义的字符串常量标识符来初始化动态数组常量——它要求数组初始化必须直接提供编译期可确定的字面量值,而非引用其他常量。
下面是两种可行的解决方案:
方案1:改用静态数组类型
将动态数组TArray<String>替换为静态数组类型,就能直接用已定义的字符串常量初始化数组:
const Test1: String = ''' [ {'Computer Webcam', TAlphaColors.Aliceblue}, {'Computer Monitor', TAlphaColors.Blueviolet}, {'Computer Mouse', TAlphaColors.Aqua}, {'Computer Keyboard', TAlphaColors.Blue}, ] '''; const Test2: String = ''' [ {'External Harddrive', TAlphaColors.Brown}, {'USB Hub', TAlphaColors.Chartreuse}, {'Computer Mousepad', TAlphaColors.Crimson} ] '''; const Test3: String = ''' [ {'Computer Mouse', TAlphaColors.Aqua}, {'Computer Keyboard', TAlphaColors.Blue}, {'External Harddrive', TAlphaColors.Brown}, ] '''; const AllTestJSON: array[0..2] of string = [Test1, Test2, Test3];
如果后续需要动态数组类型,Delphi支持静态数组到TArray<String>的隐式转换,直接赋值即可:
var DynArray: TArray<String>; begin DynArray := AllTestJSON; end;
方案2:利用编译期函数(Delphi 10.4+)
如果你的Delphi版本是10.4或更高,可以使用[Const]修饰的编译期函数来构建动态数组常量:
const Test1: String = ''' [ {'Computer Webcam', TAlphaColors.Aliceblue}, {'Computer Monitor', TAlphaColors.Blueviolet}, {'Computer Mouse', TAlphaColors.Aqua}, {'Computer Keyboard', TAlphaColors.Blue}, ] '''; Test2: String = ''' [ {'External Harddrive', TAlphaColors.Brown}, {'USB Hub', TAlphaColors.Chartreuse}, {'Computer Mousepad', TAlphaColors.Crimson} ] '''; Test3: String = ''' [ {'Computer Mouse', TAlphaColors.Aqua}, {'Computer Keyboard', TAlphaColors.Blue}, {'External Harddrive', TAlphaColors.Brown}, ] '''; [Const] function GetAllTestJSON: TArray<String>; begin Result := [Test1, Test2, Test3]; end; // 编译期生成数组常量 const AllTestJSON = GetAllTestJSON;
这种方式会在编译阶段计算出数组结果,运行时直接使用即可。
内容的提问来源于stack exchange,提问作者Shaun Roselt
相关产品推荐
相关产品推荐

