Bitter, da habe ich auf die Schnelle nicht dran gedacht.
Trotzdem macht mir myNullableInteger := 'Wurst'
Angst. Ist mir neulich zum ersten mal zur Laufzeit um die Ohren geflogen und jetzt frage ich mich die ganze Zeit wie ich noch solche Stellen finden kann...
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...
Wir machen uns mal Gedanken dazu
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:
Delphi-Quellcode:
myNullableInteger := '
Wurst';
// kompiliert nicht
myNullableInteger := Nullable<Integer>('
Wurst');
// kompiliert aber wie gehabt Exception
myNullableInteger := myVariant;
// kompiliert nicht mehr - breaking change (*)
myNullableInteger := Nullable<Integer>(myVariant);
// kompiliert und wie bisher je nachdem, was im Variant drin steckt erfolgreich oder Exception
P.S. Näää, vergisset, dat geht nich -.- Dann würde bei (*) wieder die Variant to T konvertierung zuschlagen und möglicherweise strings in Integer casten und die in den Nullable packen oder EVariantTypeCastError werfen, wenn null drin steckt.