AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Verhalten von String.Join bzgl. Array of Const Parameter
Thema durchsuchen
Ansicht
Themen-Optionen

Verhalten von String.Join bzgl. Array of Const Parameter

Ein Thema von darktrym · begonnen am 19. Nov 2020 · letzter Beitrag vom 19. Nov 2020
Antwort Antwort
darktrym

Registriert seit: 17. Jun 2020
11 Beiträge
 
Delphi 5 Professional
 
#1

Verhalten von String.Join bzgl. Array of Const Parameter

  Alt 19. Nov 2020, 13:36
Delphi-Version: 10.2 Tokyo
Hallo zusammen,
ich hätte eine Frage, ist folgendes Verhalten seitens Sprachdesign eigentlich erwünscht oder irgendwo dokumentiert?
In meinem Delphi 10.2 Programm wird beim Array of Const für String.Join impliziert der Typ gewandelt.
Ist eine Typumwandlung machbar, tut er das auch und liefert dann anschließend ein Compilerfehler!
Man erwartet offensichtlich explizit Strings wie in der Dokumentation beschrieben ist.

Also, statt String.Join(';', ['A', '1', 'C']) zu schreiben muss man String.Join(';', ['A', String('1'), 'C']) schreiben!?
Ebenso wenn man ihm Shortstrings gibt, dann taucht plötzlich das Wort 'unknown' im Rückgabewert auf.
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Verhalten von String.Join bzgl. Array of Const Parameter

  Alt 19. Nov 2020, 14:04
Also wenn ich schreibe String.Join(';', ['A', '1', 'C']); kreidet er mir das an:

Code:
[dcc32 Error] Project1.dpr(10): E2251 Ambiguous overloaded call to 'Join'
  System.SysUtils.pas(4112): Related method: class function TStringHelper.Join(const string; const array of const): string;
  System.SysUtils.pas(4113): Related method: class function TStringHelper.Join(const string; const array of string): string;
Heißt: Er weiß nicht, welche Überladung er nehmen soll.

Mit so etwas ist er dann happy:

Delphi-Quellcode:
   const args: TArray<String> = ['A', '1', 'C'];
   var myText := String.Join(';', args);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#3

AW: Verhalten von String.Join bzgl. Array of Const Parameter

  Alt 19. Nov 2020, 17:58
k.A. wer auf die schwachsinige geniale Idee kam, aber der WideChar wurde im string.Join vergessen.
> 'x' mit nur einem Zeichen ist ein Char (WideChar)
> und bei mehr oder weniger/keinem Zeichen ist es ein String (UnicodeString)

Außer im NEXTGEN (wo es hier garkeine Chars gibt), wurde nur vtChar und vtPChar implementiert, was aber die AnsiChar und PAnsiChar sind,
wobei der Compiler aber deine 'Zeichen' als WideChar übergibt.

Ebenso darfst du keine AnsiString, WideString, PWideChar, Variant oder ShortString verwenden,
siehe ValueToString im TStringHelper.Join
und alles was diese Funktion nicht kennt, wird mit "(Unknown) : %d" beantwortet.
Und es gibt keinen vernünftigen Grund, warum diese 5 Zeilen Code weggelassen wurden.
(die Codevervollständigung füllt Einem schließlich das CASE und es ist mehr Aufwand jenes geziehlt wegzulassen)


Fazit: Einzelne Zeichen mußt du entweder nach String oder AnsiChar casten,
oder warten bis in 1-5 Jahren der Fehler behoben wurde, nachdem du ihn gemeldet hast.



Fun-Fact: entweder nutzt sonst niemand das Join oder es kam viele Jahre lang noch niemand auf die Idee einzelne Char-Konstanten reinzugeben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Nov 2020 um 18:17 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:29 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