我正在使用由字符串、布尔值、整数、货币和其他记录组成的记录,在类的方法中。我想要递归地将所有基本类型的字段初始化为空/假/零。Delphi似乎不会默认执行此操作。有没有一种简单的方法可以完成这个任务,而不需要通过名称访问每个字段并手动设置它们?
我正在使用由字符串、布尔值、整数、货币和其他记录组成的记录,在类的方法中。我想要递归地将所有基本类型的字段初始化为空/假/零。Delphi似乎不会默认执行此操作。有没有一种简单的方法可以完成这个任务,而不需要通过名称访问每个字段并手动设置它们?
您可以使用以下两种构造之一(其中 Foo 是一个记录)。
FillChar(Foo, SizeOf(Foo), 0);
ZeroMemory(@Foo, SizeOf(Foo));
这段内容来自Allen Bauer的帖子。
在研究FillChar最常见的用法时,我们发现它主要被用于将内存初始化为某个给定的字节值,而不是用于填充字符数据。因此我们决定保持FillChar以字节为中心的设计。
FillChar(Foo, SizeOf(Foo), 0);
- Im0rtality自Delphi 2007起,您可以使用Default()
内置函数:
var
LRecord: TMyRecord;
begin
LRecord := Default(TMyRecord);
...
好的,您可以采用一种简单的法律技巧
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;
Foo := Default(TFoo);
来初始化一个记录。请参考问题 How to properly free records that contain various types in Delphi at once? 中 David 的回答。 - LU RD