![]() |
Delphi-Version: 10 Seattle
TValue.AsVariant und Boolean - Fehler?
Hallo,
Mir ist gerade aufgefallen, dass die Umwandlung eines Boolean-TValues in ein Variant nicht funktioniert:
Delphi-Quellcode:
Angezeigt wird "1 - 20". Und VarType 20 ist varInt64.
procedure TForm1.Button1Click(Sender: TObject);
var val: TValue; bVar: Variant; begin val := true; bVar := val.AsVariant; ShowMessage(VarToStr(bVar) + ' - ' + IntToStr(VarType(bVar))); end; Das Problem liegt in der System.RTTI:
Delphi-Quellcode:
In meinen Augen sollte da der Spezialfall
function Conv2Variant(const ASource: TValue; ATarget: PTypeInfo; out AResult: TValue): Boolean;
var v: Variant; begin // .. case ASource.Kind of // .. tkEnumeration: v := ASource.AsOrdinal; // .. end; // .. end;
Delphi-Quellcode:
behandelt werden, damit bei der Umwandlung von einem Boolean-TValue auch ein Variant mit dem Typ varBoolean rauskommt.
(ASource.Kind = tkEnumeration) and (ASource.TypeInfo = TypeInfo(Boolean))
In meinen Augen ist das ein Fehler, oder sehe ich das falsch? |
AW: TValue.AsVariant und Boolean - Fehler?
In Tokyo sieht das mittlerweile so aus:
Delphi-Quellcode:
tkEnumeration:
if ASource.IsType<Boolean> then v := ASource.AsBoolean else v := ASource.AsOrdinal; |
AW: TValue.AsVariant und Boolean - Fehler?
Sehr gut!
Dann hat sich das erledigt :) |
AW: TValue.AsVariant und Boolean - Fehler?
Wusste doch, dass ich das schonmal gesehen habe - nur der Vollständigkeit halber:
![]() In die andere Richtung ist übrigens noch fehlerhaft: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 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