如何完成通过函数的无类型参数传递的记录?

dur*_*ara 4 delphi record finalize clear delphi-6

我可以将"任何"记录类型传递给我的程序吗?

我多次使用带有字符串的"记录".

type 
  TR = record
    a: string;
    b: string;
  end;
Run Code Online (Sandbox Code Playgroud)

要清除它们,我需要写:

Finalize(R);
FillChar(R, SizeOf(R), #0);
Run Code Online (Sandbox Code Playgroud)

问题是如何通过任何类型的记录来清除它?

为此我得到了这个提示:"表达式不需要初始化/完成".

procedure ClearRecord(var R);
begin
  Finalize(R);
  FillChar(R, SizeOf(R), #0);
end;
Run Code Online (Sandbox Code Playgroud)

感谢您的每一个信息!

LU *_* RD 11

不要让它过于复杂.如果您不想写两行来清除记录,请考虑声明:

Const TR_Empty: TR = ();
Run Code Online (Sandbox Code Playgroud)

并使用它:

R := TR_Empty;
Run Code Online (Sandbox Code Playgroud)

并且正如其他人所评论的那样,执行此操作的通用程序并不值得付出努力.

如果您有Delphi-2009或更新版本,此代码对清除记录有效:

R := Default(TR);
Run Code Online (Sandbox Code Playgroud)

  • @TLama,请参阅David的答案:[如何在Delphi中正确释放包含各种类型的记录?](http://stackoverflow.com/a/11066205/576719). (2认同)