anchor.diff:    Result := FElements.TryGetValue(GetKey(AName), AObject);
   end;
   
  +{ TCsvBaseElement }
  +
  +procedure TCsvBaseElement.SetValue(const Value: string);
  +begin
  +  FValue := Value;
  +end;
  +
   end.
  
positive.code: begin
    inherited Create();
    FName := AName;
    FElementValue := TCsvBaseElement.Create;
  end;
  
  destructor TCsvNamedElement.Destroy;
  begin
    FElementValue.Free;
    inherited Destroy;
  end;
  
  procedure TCsvNamedElement.SetValue(const AValue: string);
  begin
    FElementValue.Value := AValue;
    FValue := AValue;
  end;
  
  { TCsvObjectElement }
  
negative.code:   private
      FValue: string;
    public
      procedure SetValue(const Value: string); virtual;
    public
      property Value: string read FValue write SetValue;
    end;
  
    TCsvNamedElement = class(TCsvBaseElement)
    private
      FName: string;
      function GetElementValue: TCsvBaseElement;
    public
      constructor Create(const AName: string); virtual;
      destructor Destroy; override;
  
      property Name: string read FName write FName;
      property ElementValue: TCsvBaseElement read GetElementValue;
    end;
  
    TCsvObjectElement = class(TCsvBaseElement)
  