我被困了一下。我想在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;
答案 0 :(得分:4)
记录通常按值传递给函数/过程,因此您必须使用var参数通过引用传递,因此将ValidateParameters_Record
更改为
procedure ValidateParameters_Record(var aRec: TRec)
然后在ValidateParameters
内你需要创建一个临时记录,因为记录属性不能作为var参数传递,例如
procedure TSampleClass.ValidateParameters;
var
Rec: TRec;
begin
Rec := fParameters.Rec;
ValidateParameters_Record(Rec);
fParameters.Rec := Rec;
end;