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的构造函数语法。