【问题标题】:How can I initialize a record declared as a local variable?如何初始化声明为局部变量的记录?
【发布时间】:2010-08-13 14:18:22
【问题描述】:

我在一个类的方法中使用由字符串、布尔值、整数、货币和其他记录数组组成的记录。我想递归地将原始类型的所有字段初始化为空/假/零。默认情况下,Delphi 似乎不这样做。有没有一种不涉及按名称访问每个字段并手动设置它的简单方法来完成此操作?

【问题讨论】:

标签: delphi


【解决方案1】:

您可以使用以下构造中的任一(其中 Foo 是一条记录)。

FillChar(Foo, SizeOf(Foo), 0); 

ZeroMemory(@Foo, SizeOf(Foo));

来自Allen Bauer的帖子

在查看最常见的用途时 对于 FillChar 以确定 大多数人是否使用 FillChar 实际上用字符填充内存 数据或仅使用它来初始化 具有某些给定字节值的内存,我们 发现是后一种情况 主导了它的使用,而不是 前任的。有了这个,我们决定保留 FillChar 以字节为中心。

【讨论】:

  • 或具有(可能)更好可读性的相同代码:ZeroMemory(@Foo, SizeOf(Foo));
  • @Im0rtality:我已更新答案以包含您的 ZeroMemory 解决方案。
  • 请注意,ZeroMemory 是 Delphi 某些 版本(至少 d6 和 7)中 FillChar 的包装器。
【解决方案2】:
【解决方案3】:

好吧,你可以应用一个简单的法律技巧

unit unit1;

interface

type
  PMyRecord = ^TMyRecord;
  TMyRecord = record
    Value: Integer;
    function Self: PMyRecord;
  end;

implementation

function TMyRecord.Self: PMyRecord;
begin
  Result := @Self;
end;

procedure Test(AValue: Integer);
const MyRecord: TMyRecord = (Value: 0);
begin
  MyRecord.Self.Value := AValue;
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2016-09-07
    相关资源
    最近更新 更多