gpt4 book ai didi

delphi - 无法赋值

转载 作者:行者123 更新时间:2023-12-02 04:10:48 25 4
gpt4 key购买 nike

我有点卡住了。我想检查并验证 TRec 中的变量,其中任何一个变量为空或其他内容。主要问题是在我验证记录后它没有改变。我不知道问题出在哪里。

任何帮助或建议将不胜感激。

这是我的例子:

  TRec = record
Name: string;
Age: string;
etc...
end;

TParameterRec = record
private
fRec: TRec;
procedure SetRec(Value: TRec);
public
property Rec: TRec read fRec write SetRec;
end;

TSampleClass = class
private
fParameters: TParameterRec;
protected
ValidateParameters;
ValidateParameters_Record(aRec: TRec);
public
property Parameters: TParameterRec read fParameters write SetParameters;
end;

procedure TSampleClass.SetParameters(Value: TParameterRec);
begin
fParameters := Value;
ValidateParameters;
end;

procedure TSampleClass.ValidateParameters;
begin
ValidateParameters_Record(fParameters.Rec);
end;

procedure TSampleClass.ValidateParameters_Record(
aRec: TRec);
begin
if aRec.Name = '' then
aRec.Name := 'something'; //Here nothing happens, outside name will be empty
end;

procedure TParameterRec.SetRec(Value: TRec);
begin
fRec := Value;
end;

....
var
SampleClass: TSampleClass;
ParamRec: TParameterRec;
begin
SampleClass := TSampleClass.Create;
try
ParamRec.Rec := SomeRec; //It has default values, Name is empty
SampleClass.Parameters := ParamRec;
....

end;

最佳答案

记录通常按值传递到函数/过程中,因此您必须使用 var 参数按引用传递,因此将 ValidateParameters_Record 更改为

procedure ValidateParameters_Record(var aRec: TRec)

然后在 ValidateParameters 中,您需要创建一个临时记录,因为记录属性不能作为 var-parameters 传递,例如

procedure TSampleClass.ValidateParameters;
var
Rec: TRec;
begin
Rec := fParameters.Rec;
ValidateParameters_Record(Rec);
fParameters.Rec := Rec;
end;

关于delphi - 无法赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49954455/

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