Ich habe mich vor den Delphi-Variants immer gedrückt und weiß wenig darüber. Hier, was ich glaube:
System.Variants.Null()
liefert ein Variant, das bei seinen Casts immer "Null" zurückgibt. Auf eine Zahl ist es
0
, auf einen String ist es ein leerer String, auf eine Referenz ist es
Nil
usw.
Dementgegen steht
System.Variants.Unassigned()
: Das liefert einen Variant, der
nichts ist. Man kann ihn nirgendwo hin casten, es steckt nichts drin.
Richtig soweit? Wenn ja wundert es mich, warum ein leeres
Spring4D-Nullable<> (also mit nichts drin) beim Cast auf ein Variant
Null()
zurückgibt und nicht
Unassigned()
.
Welchen Grund hat das? Hier noch einmal der aktuelle Sourcecode in Spring:
Delphi-Quellcode:
class operator Nullable<T>.Implicit(const value: Nullable<T>): Variant;
var
v: TValue;
begin
if value.HasValue then
begin
v := TValue.From<T>(value.Value);
if v.IsType<Boolean> then
Result := v.AsBoolean
else
Result := v.AsVariant;
end
else
Result := Null; // Warum?
end;