Arrays 是否可能:记录中的数组
我有下一个数组Arrays 是否可能:记录中的数组,arrays,delphi,record,Arrays,Delphi,Record,我有下一个数组 NAMES1: array[0..1] of string = ('NO1','NAME1'); NAMES2: array[0..1] of string = ('NO2','NAME2'); 和记录结构 TMyRec = record( Name: ????; ); 因此,我需要声明一个常量记录数组,如下所示 const StringArraysList: array[0..1] of TMyRec = ( (Name: NAMES1), (Nam
NAMES1: array[0..1] of string = ('NO1','NAME1');
NAMES2: array[0..1] of string = ('NO2','NAME2');
和记录结构
TMyRec = record(
Name: ????;
);
因此,我需要声明一个常量记录数组,如下所示
const
StringArraysList: array[0..1] of TMyRec = (
(Name: NAMES1),
(Name: NAMES2)
);
问题是我应该为TMyRec中的Name选择什么类型?您可以声明一个新类型
TName = array[0..1] of string;
并在你的记录声明中使用它。
你的声明就变成了
type
TName = array[0..1] of string;
TMyRec = record
Name: TName;
end;
const
StringArraysList: array[0..1] of TMyRec = (
(Name: ('NO1','NAME1')),
(Name: ('NO2','NAME2'))
);
您可以声明一个新类型
TName = array[0..1] of string;
并在你的记录声明中使用它。
你的声明就变成了
type
TName = array[0..1] of string;
TMyRec = record
Name: TName;
end;
const
StringArraysList: array[0..1] of TMyRec = (
(Name: ('NO1','NAME1')),
(Name: ('NO2','NAME2'))
);
您需要这样做:
type
TTwoNames = array[0..1] of string;
TMyRec = record
Names: TTwoNames;
end;
const
StringArraysList: array[0..1] of TMyRec = (
(Names: ('NO1','NAME1')),
(Names: ('NO2','NAME2'))
);
您更愿意将最终声明写为
const
NAMES1: TTwoNames = ('NO1','NAME1');
NAMES2: TTwoNames = ('NO2','NAME2');
StringArraysList: array[0..1] of TMyRec = (
(Names: NAMES1),
(Names: NAMES2)
);
但这会导致
[DCC错误]单元1.pas(38):应为E2026常量表达式
有些Delphi常量并不像您希望的那样恒定
向下列国家提供的文件:
这些值必须由常量表达式表示
向下列国家提供的文件:
类型化常量不能出现在常量表达式中
把这两条规则放在一起,我们就有了E2026,你需要这样做:
type
TTwoNames = array[0..1] of string;
TMyRec = record
Names: TTwoNames;
end;
const
StringArraysList: array[0..1] of TMyRec = (
(Names: ('NO1','NAME1')),
(Names: ('NO2','NAME2'))
);
您更愿意将最终声明写为
const
NAMES1: TTwoNames = ('NO1','NAME1');
NAMES2: TTwoNames = ('NO2','NAME2');
StringArraysList: array[0..1] of TMyRec = (
(Names: NAMES1),
(Names: NAMES2)
);
但这会导致
[DCC错误]单元1.pas(38):应为E2026常量表达式
有些Delphi常量并不像您希望的那样恒定
向下列国家提供的文件:
这些值必须由常量表达式表示
向下列国家提供的文件:
类型化常量不能出现在常量表达式中
把这两条规则放在一起,我们就有了E2026,谢谢你的回答。如果我需要不同维度的新数组,该怎么办。类似于以下内容:NAMES3:string=('NO3','NAME3','SMTH-ELSE')的数组[0..2];因此,我不能将TTwoNames声明为两个元素的数组,也不能将其作为常量。然后,您需要在运行时分配一个动态数组。我总是倾向于将“true constants”视为“命名文字”,即它们只是文字的符号替换。@Yura:如果您想使用动态数组,您可以在运行时使用SetLength,然后逐个设置每个项,但您也可以这样做:
MyArray:=TStringDynArray.Create('NO3','NAME3','SMTH-ELSE');
使用dynarrays的构造函数语法。谢谢你的回答。如果我需要新数组,那么维度不同的情况会怎样呢?比如:NAMES3:string=('NO3','NAME3','SMTH-ELSE'的数组[0..2]);因此,我不能将TTwoNames声明为两个元素的数组。然后,你根本不能将其作为常量。然后,你需要一个在运行时分配的动态数组。我总是倾向于将“真常量”视为“命名文字”,即它们只是文字的符号替换。@Yura:如果您想使用动态数组,可以在运行时使用SetLength,然后逐个设置每个项,但也可以这样做:MyArray:=TStringDynArray.Create('NO3','NAME3','SMTH-ELSE');
使用dynarray的构造函数语法。