gpt4 book ai didi

delphi - Delphi中有记录的操作

转载 作者:行者123 更新时间:2023-12-03 18:26:38 25 4
gpt4 key购买 nike

我有以下代码

type
TEnumTest = (
Hello1 = 0,
Hello2 = 1,
Hello3 = 2,
Hello4 = 3,
Hello5 = 4
);

type
TRecordTest1 = record
testa : Integer;
testb : AnsiString;
testc : Boolean;
testd : LongWord;
end;

type
TRecordTest2 = record
testa : Integer;
testb : AnsiString;
testc : Boolean;
testd : TEnumTest;
end;

type
TRecordTest3 = record
testa : Integer;
testb : AnsiString;
testc : Boolean;
testd : TEnumTest;
end;

type
TRecordTest4 = record
testa : Integer;
testb : AnsiString;
testc : Boolean;
testd : TEnumTest;
end;

type
TtestRecord = record
test1 : TRecordTest1;
test2 : TRecordTest2;
test3 : TRecordTest3;
test4 : TRecordTest4;
end;

有没有办法使用反射或其他机制,以便我可以执行以下操作:

var
a : TtestRecord;
b : TtestRecord;
if a = b then
begin
..............
..............
end;
clearAllValues(a);

我刚刚添加了逻辑表达式

最佳答案

比较两条记录是否相等

您当然可以使用 RTTI 来执行记录比较。但是,我想我会通过使用带有比较运算符的扩展记录来做到这一点。例如:

type
TMyRecord = record
i: Integer;
s: string;
class operator Equal(const lhs, rhs: TMyRecord): Boolean;
class operator NotEqual(const lhs, rhs: TMyRecord): Boolean;
end;

class operator TMyRecord.Equal(const lhs, rhs: TMyRecord): Boolean;
begin
Result := (lhs.i = rhs.i) and (lhs.s = rhs.s);
end;

class operator TMyRecord.NotEqual(const lhs, rhs: TMyRecord): Boolean;
begin
Result := not (lhs = rhs);
end;

清除记录

您可以使用内部函数Default来默认初始化任何类型。我会包含一个文档链接,但遗憾的是,这个函数没有文档记录。

您可以这样编写代码:

var
a: TTestRecord;
...
a := Default(TTestRecord); // a is replaced with default initialized value

未记录的 Default 函数采用类型标识符作为其参数,并返回该类型的默认初始化实例。因此,数字类型初始化为零,字符串初始化为 '',指针初始化为 nil 等。

关于delphi - Delphi中有记录的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com