无法分配值

时间:2018-04-21 09:50:41

标签: delphi delphi-10.1-berlin

我被困了一下。我想在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;

1 个答案:

答案 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;