Delphi 无法赋值

Delphi 无法赋值,delphi,delphi-10.1-berlin,Delphi,Delphi 10.1 Berlin,我有点卡住了。我想在TRec中检查和验证我的变量,其中任何一个都是空的。主要问题是在我验证记录后,它没有更改。我不知道是什么问题 任何帮助或建议都将不胜感激 以下是我的例子: TRec = record Name: string; Age: string; etc... end; TParameterRec = record private fRec: TRec; procedure SetRec(Value: TRec); pu

我有点卡住了。我想在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_记录更改为

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

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

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

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

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

谢谢你的帮助!谢谢你的帮助!