是否可能:记录中的数组

时间:2011-09-30 06:16:05

标签: 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),
    (Name: NAMES2)
  );

问题是我应该在TMyRec中为Name选择什么类型?

2 个答案:

答案 0 :(得分:11)

你需要这样做:

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错误] Unit1.pas(38):E2026期望的常量表达式

有些Delphi常量并不像你希望的那样恒定!

record constants的文档说明了

  

值必须用常量表达式表示。

typed constants的文档说明了

  

类型常量不能出现在常量表达式中。

将这两条规则放在一起,我们有E2026

答案 1 :(得分:5)

您可以声明一个新类型

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'))
  );