AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Boolean.ToString geht nicht?!

Ein Thema von Rolf Frei · begonnen am 12. Mär 2024 · letzter Beitrag vom 13. Mär 2024
Antwort Antwort
Seite 1 von 2  1 2      
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#1

Boolean.ToString geht nicht?!

  Alt 12. Mär 2024, 14:17
Delphi-Version: 11 Alexandria
Ich möchte gerne einen Boolean in Stringform anzeigen. Dazu wollte ich BoolVar.ToString nutzen. Leider btingt mir das immer den Zahlenwert, also 0 oder -1. Die Boolean.ToString Helperfunktionen scheinen nicht zu funktionieren. Da läuft irgendwas mit den Default Parametern der Helperklasse und ser Sysutils.BooToStr Funktion ziemlich falsch.

Delphi-Quellcode:
var
  b: Boolean;
  s: String;
begin
  b := True;
  s := b.ToString; // liefert '-1'
  s := b.ToString(True); // Liefert '-1', müsste aber 'True' liefern

  b := False;
  s := b.ToString; // liefert '0'
  s := b.ToString(True); // Liefert '-1' ?! Der True Parameter müsste steuern, ob die BooleStr verwendet werden sollen (UseBooleStrs)!

Geändert von Rolf Frei (12. Mär 2024 um 14:30 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Boolean.ToString geht nicht?!

  Alt 12. Mär 2024, 14:38
Ich nehme immer meinBoolean.ToInteger().ToString() , damit bekommst du 0 für False und 1 für True ��
  Mit Zitat antworten Zitat
itsChris

Registriert seit: 29. Jul 2022
21 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Boolean.ToString geht nicht?!

  Alt 12. Mär 2024, 14:46
Hi,

habe das gerade ausprobiert und das gleiche Verhalten wie Rolf. Irgendwie kommt der Compiler mit der überladenen Funktion vom Helper durcheinander. Wenn man der .ToString-Methode True übergibt (ruft BoolToStr auf), interpretiert das die aufgerufene BoolToStr-Methode komischerweise als False. Es funktioniert nur, wenn den gewünschten Parameter TUseBoolStrs.True benutzt wird, obwohl TUseBoolStrs ja auf True oder False verweist, was irgendwie komisch ist.
Delphi-Quellcode:
  var
    b: Boolean;
    s: string;
  begin
    b := True;
    s := b.ToString; //-1, richtig
    s := b.ToString(True); //-1, obwohl 'True' erwartet, siehe Rolfs Kommentar
    s := b.ToString(TUseBoolStrs.True); //'True', richtig
    s := BoolToStr(b, True); //'True', richtig
  end;
Die Rückgabe von 0 und -1 ist richtig, siehe Doku:
https://docwiki.embarcadero.com/Libr...tils.BoolToStr

Als Alternative kannst du einfach s := BoolToStr(b, True); benutzen.

Geändert von itsChris (12. Mär 2024 um 14:54 Uhr)
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#4

AW: Boolean.ToString geht nicht?!

  Alt 12. Mär 2024, 14:52
Was funktioniert ist:
 s := b.ToString(TUseBoolStrs.True); hier wird im class helper nicht richtige Funktion verwendet. (zumindest in meinen Beispiel)
True <> TUseBoolStrs.True
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Boolean.ToString geht nicht?!

  Alt 12. Mär 2024, 15:15
Ja das mit dem TUseBoolStrs.True habe ich unterdessen auch rausgefunden. Bool.ToString(TUseBoolStrs.True) liefert "True", Bool.ToString(True) liefert "-1".

Hat da wer eine plausible Erklärung für dieses Verhalten und wieso man da unbedingt TUseBoolStrs.True nutzen muss?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Boolean.ToString geht nicht?!

  Alt 12. Mär 2024, 15:18
Das siehst du doch eigentlich direkt auf den ersten Blick:
screenshot-2024-03-12-151747.png
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Boolean.ToString geht nicht?!

  Alt 12. Mär 2024, 15:21
entfernt - habe mich geirrt
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.452 Beiträge
 
Delphi 12 Athens
 
#8

AW: Boolean.ToString geht nicht?!

  Alt 12. Mär 2024, 15:34
Hat da wer eine plausible Erklärung für dieses Verhalten und wieso man da unbedingt TUseBoolStrs.True nutzen muss?
Na ja, in einem Fall wird halt die class function aufgerufen, deren erster Parameter der umzuwandelnde Boolean ist. Der optionale zweite Parameter gibt dann die Darstellung an.

Bei der regulären function gibt es nur den optionalen Parameter für die Darstellung.

Problematisch ist hier die Kombination von Overloads und optionalen Parametern gepaart mit der Kollision des zu bearbeitenden Typs (Boolean) und dem erwarteten Parameter für die Darstellung (ebenfalls Boolean). Diese Kollision wurde mit dem neuen Typ TUseBoolStrs umgangen. Leider passt das nicht mehr zur Erwartungshaltung des Entwicklers.

Es gibt aber auch Meinungen, dass ein Aufruf einer class function nur über die Angabe des Typs und nicht einer Variablen des Typs gehen dürfte. Ich fürchte nur, dass eine solche Einschränkungen eine Menge Code nicht mehr compilieren ließe.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Boolean.ToString geht nicht?!

  Alt 12. Mär 2024, 15:47
Ok danke für die Erläuterung. Wenn ich da als Anwender den Defaultwert False in der Parmaterliste sehe, komme ich nicht dirket auf die Idee, da TUseBoolStrs.True zu verwenden. Wäre dort der Defaultwert mit TUseBoolStrs.False angezeigt worden, wäre es wohl deutlich klarer gewesen.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Boolean.ToString geht nicht?!

  Alt 12. Mär 2024, 15:52
Wäre dort der Defaultwert mit TUseBoolStrs.False angezeigt worden, wäre es wohl deutlich klarer gewesen.
Das stimmt allerdings.

Hätten wir einen funktionierenden Bugtracker oder Feedback-System bei Embarcadero, könnte man das sogar dort einreichen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz