AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Record Helper für generische Records (Spring)

Ein Thema von Nersgatt · begonnen am 23. Okt 2014 · letzter Beitrag vom 23. Okt 2014
 
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Record Helper für generische Records (Spring)

  Alt 23. Okt 2014, 09:46
Delphi-Version: 5
Moin,

ich setze das Spring-Framework ein, insbesondere daraus die Nullable-Typen.
Nun wollte ich für diese Typen Record Helper basteln. Das compiliert auch korrekt. Jedoch wird bei der Codeausführung ein falscher Recordhelper verwendet (die Ausführung springt in den falschen Helper).

Codebeispiel:
Delphi-Quellcode:
uses
  [...] Spring, System.JSON;

type
  TNullableStringHelper = record helper for TNullableString
  public
    function getJSONValue : TJSONValue;
  end;

  TNullableBooleanHelper = record helper for TNullableBoolean
  public
    function getJSONValue : TJSONValue;
  end;
Implementiert:
Delphi-Quellcode:
{ TNullableStringHelper }

function TNullableStringHelper.getJSONValue: TJSONValue;
begin
  if self.HasValue then
    result := TJSONString.Create(self.GetValueOrDefault)
  else
    result := TJSONNull.Create;
end;

{ TNullableBooleanHelper }

function TNullableBooleanHelper.getJSONValue: TJSONValue;
begin
  if self.HasValue then
    if self.GetValueOrDefault then
      result := TJSONTrue.Create
    else
      result := TJSONFalse.Create
  else
    result := TJSONNull.Create;
end;
Wenn ich dies nun teste:
Delphi-Quellcode:
procedure TForm10.FormCreate(Sender: TObject);
var
  str : TNullableString;
  jv : TJSONValue;
begin

  str := 'Test';
  jv := str.getJSONValue;

  self.Caption := jv.ToJSON;

end;
stelle ich fest, dass immer in den Helper TNullableBooleanHelper gesprungen wird, statt in den TNullableStringHelper, wie ich es erwarten würde.
Ich kann mir das Verhalten so gar nicht erklären. In der Caption des Formulars steht nach Ausführung "True" und nicht "Test" wie ich es erwarten würde. Es ist also nicht nur ein Problem des Debuggers, sondern wird tatsächlich so ausführt.

Für die, die das Spring-Framework nicht kennen, die Nullable-Typen sehen so aus:
Es gibt den Record Nullable:
Delphi-Quellcode:
Nullable<T> = record
[...]
Darauf bauen die anderen Typen auf:
Delphi-Quellcode:
TNullableString = Nullable<string>;
TNullableBoolean = Nullable<Boolean>;
Kann mir jemand helfen?

Danke!
Jens
Jens
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz