Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Stevie,
11. Mai 2017
Lange hat's gedauert, aber ich hab wohl endlich eine Lösung gefunden ;)
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Stevie,
16. Nov 2015
Guck dir einfach die Doku zu implicit und explicit Operator overloads an denn du scheinst offensichtlich miszuverstehen, was implizit und explicit bedeutet.
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.
Schade, dachte du hättest da einen Trick gefunden....
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Stevie,
16. Nov 2015
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?
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Stevie,
16. Nov 2015
Nö, implicit heißt normale Zuweisung, explicit heißt, dass man einen Hardcast nutzen muss.
Also so:
myNullableInt := Nullable<Integer>(myDatabaseField.Value);
oder
myNullableInt := Nullable<Integer>(myStrangeVariant)
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Stevie,
13. Nov 2015
Najo, einen Variant nem Nullable<Integer> zuweisen, der nicht in einen Integer konvertiert werden kann, knallt bei dir leider ebenfalls zur Laufzeit.
Simples Aliasing, das kann ja auch jeder mit den Spring4D Nullables machen, wie er beliebt.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Stevie,
13. Nov 2015
Ja, das ist zugegebenerweise ziemlich bescheiden so, da hier der string erst in einen Variant konvertiert wird, um dann in den Implicit operator gepackt zu werden... :wall:
Wir machen uns mal Gedanken dazu :gruebel:
Eine Möglichkeit, die mir spontan einfällt, wäre den implicit operator für Variant->Nullable<T> auf explicit zu ändern. Dann muss man einen Hardcast schreiben:
...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Stevie,
13. Nov 2015
Absolut nicht. Nullable<T> ist als immutable designed.
Überleg mal, was sonst mit solchem Code passiert:
myObj.NullableIntProp.Value := 42;
...
Da Nullable<T> ein Record ist, würdest du nämlich dann nur die lokale Kopie verändern.
siehe http://stackoverflow.com/a/9157045/587106
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Stevie,
13. Nov 2015
Dein eingangs beschriebenes Problem liegt einzig und allein an dem Pointer overload, den ich aber in Rücksprache mit meinem Kollegen für 1.2 entfernen werde.
Immerhin kann man ja := Null schreiben, was exakt dieselbe Auswirkung hat, nur ohne die negativen Seiteneffekte, dass ich sämtliche Referenztypes assignen kann.
Nullable<T> <-> Variant Kompatibilität ist explizites Feature.
Allerdings...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Stevie,
13. Nov 2015
Wieso nicht? Wenn sie konstruktiv ist, ist das immer willkommen.
Ja, damit man meinNullable := nil schreiben kann.
Über die Nützlichkeit und die möglichen Auswirkungen davon kann man gerne diskutieren.
Aber wenn man das nicht mag, auskommentieren, glücklich sein. Das ist ja das schöne an open Source, gell? :)