Mein Delphi 2010 stoplert über 2 Sachen:
In Calculator.Calulate benutzt du eine (scheinend globale?) Variable namens FormatSettings.
Die gibt es bei mir nicht.
Ich habe es so gelöst.
Delphi-Quellcode:
FormatSettings : TFormatSettings;
begin
fValid := True;
if Length( s ) <3 then begin
fValid := False;
Exit( 0 );
end;
SysUtils.GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FormatSettings);
Der Call füür getlocale ist sicherlich weniger teuer, als sowas statisch für die Laufzeit der App zu cachen. (Da du ja dann keine Änderungen der Settings bemerken würdest)
Dann benutzt du an 2 Stellen einen Safecast ("as") auf TObject, den mag mein Delphi auch nicht.
Ich musst hier einen Hard-Cast machen:
Delphi-Quellcode:
//TLinQ<T>.Remove
TObject(fItems[index]).Free;
//TLinQ<T>.Clear;
for item in fItems do TObject(item).Free;
Da du in beiden Fällen vorher die
RTTI fragst, ob T eine Klasse ist, musst du hier auch nicht befürchten, dass du den Kater auf TEichhörnchen wurschtelst...
Rein vom
API-Design her, finde ich es ein wenig zu einvernehmend die
Unit LinQ und die Klasse TLinq zu nennen.
Solche doch sehr offensichtlichen Namen sollten dem Delphi-Team vorbehalten bleiben.
Falls Delphi irgendwann sowas kriegt, könnten
Unit- oder Type-Name mit dem kollidieren, was Borlemb aus dem Hut zaubert.
Oder es kollidiert mit den sicherlich vorhandenen anderen LinQ-Workarounds für Delphi.
Oh, und "SELECT" als Prefix ist anscheinend gar nicht nötig. Vllt einfach aus den Beispielen rausnehmen.
Wirkt komisch, wenn man keine Property-liste angeben kann.
Ansonsten ist das sicherlich eine nette Bereicherung für so manchen.