![]() |
AW: Spring4D: Nullables
Zitat:
Delphi-Quellcode:
. Das will man im Endeffekt doch.
myDatabaseField.Value
Oder ist es tatsächlich, wie Dejan Vu meint, nur als eine andere Schreibweise für Variants gedacht?
Delphi-Quellcode:
erlaubt:
class operator Explicit(const from: Variant): Nullable<T>;
class operator Implicit(const from: T): Nullable<T>;
Delphi-Quellcode:
var
myWrapper: TWrapper<Integer>; myVariant: Variant; begin myWrapper := 42; //myWrapper := 'Hallo'; // nope myWrapper := Variant('Hallo'); // oder myVariant := 'Hallo'; myWrapper := myVariant; end. |
AW: Spring4D: Nullables
TField.Value ist ein Variant. Und wenn man AsX (X sei der Typ des Felds, also string, Integer o.Ä.) führt bei Null zu einem Fehler. Daher gibts den Overload für Variant, so dass der Variant nicht erst in eine Null exception läuft sondern das "auspacken" dem Nullable überlässt.
Und nein, ein Nullable ist kein Variant! In einen Variant kann ich zur Laufzeit alles (*) reinpacken und der Variant ist fröhlich. In einen Nullable geht nur T oder ein Variant (wobei der Variant auch nur einen T beinhalten darf, es wird hier keine Konvertierung durchgeführt). Dass das nunmal nicht zur Compiletime geht liegt daran, dass es nicht im Compiler eingebaut ist. Dafür musst du dich an Embarcadero wenden. (*) was in einen Variant passt Wenn du in deinem Code die stellen aufdecken willst, die den Variant overload nutzen, dann schlag ich vor, pack nen deprecated an diesen Overload und du siehst beim Kompilieren jede Stelle, die den nutzt. |
AW: Spring4D: Nullables
Zitat:
Delphi-Quellcode:
eben kein
Nullable<Integer>
Delphi-Quellcode:
zugewiesen werden. Mein
string
Delphi-Quellcode:
hat auch keinen impliziten Cast von einem
Nullable<T>
Delphi-Quellcode:
, denn nach meinem Verständnis soll ein
Variant
Delphi-Quellcode:
eben nicht alles beinhalten, sondern typsicher den angegebenen Typen
Nullable<T>
Delphi-Quellcode:
oder eben nichts.
T
Genau das steht auch schon in meinen Beiträgen hier ... Und wie immer ist dieses Konstrukt einfach nur zum Vereinfachen gedacht:
Delphi-Quellcode:
var
a,b,c : Nullable<Integer>; d : Integer; begin a := Nullable.Null; b := 42; c := a+b; // c => Null d := a.ValueOrDefault() + b.ValueOrDefault(); // d => 42 end; |
AW: Spring4D: Nullables
Dann mach doch deinen Nullable open Source, Günther kann ihn nutzen und wir ersparen uns die ewige Im-Kreis-Dreherei. :roll:
P.S. Was macht eigtl dein Add overload bei Typen, bei denen es keine Addition gibt? |
AW: Spring4D: Nullables
Lass uns noch ein bisschen drehen :spin2:
Ein bisschen. Zitat:
Ist es explizit, kann man weiterhin alle
Delphi-Quellcode:
reinstecken. Oder
TField.Value
Delphi-Quellcode:
. Oder was auch immer. Was würde man dadurch verlieren?
IXMLNode.Value
|
AW: Spring4D: Nullables
Zitat:
|
AW: Spring4D: Nullables
Zitat:
Der Fakt, dass ein string in einen Variant gecastet wird und dann an den Variant Overload übergeben wird, hat nix mit dem Overload zu tun, sondern damit, wie Variants funktionieren. Zitat:
![]() |
AW: Spring4D: Nullables
Zitat:
Seitdem ich Nullables in C# entdeckt habe, trauere ich den Variants hinterher. Auf der anderen Seite brauche ich sie eigentlich nie. |
AW: Spring4D: Nullables
Zitat:
Wenn einem die eine oder andere Funktionalität nicht zusagt, dann kommentiert man die einfach aus (Open Source lässt grüßen). Mein Beitrag hierzu war den Grund zu erläutern, warum es so einen Variant Cast gibt - ich persönlich den aber nicht mag - und wie ich es bei mir persönlich gelöst habe, um eine Alternative aufzuzeigen. Das nennt man dann Austausch von Gedanken und Erfahrungen. Mag seltsam klingen, mir aber egal. |
AW: Spring4D: Nullables
Sag mal, hast Du Anteile an Bold-Schriften erworben oder wieso spickst Du deine Ausführungen ständig damit?
Das fette 'Mein..Meine...meins' Zitat sollte eher darauf hinweisen, das man es mit der Betonung der EIGENEN Meinung auch ÜBERTREIBEN kann, ABER DAS SCHEINT NICHT ANGEKOMMEN ZU SEIN !!!!!11!!!!11!1!EINS!!!1!!ELF!!! Wink. Zaun. Pfahl. Netiquette. Blinzel. Knick-Knack. Say No more. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz