Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Konstantenausdruck verletzt untere Grenze

  Alt 6. Sep 2024, 22:45
Der Fehler ist eigentlich, dass in Wirklichkeit die obere Grenze verletzt wird.

Nja, leider ist das, was du da hast kein Array, sondern ein SET und das geht nur von 0 bis 255.
Mir wäre auch lieber, wenn der Compiler so schlau wäre und in diesem Fall ein Array daraus machen würde.

PS: Das ist auch der Grund, warum Emba mal dieses grauenhaft perverse Delphi-Referenz durchsuchenCharInSet erfand, denn C in ['a', 'z'] ist ebenfalls ein SET und da passt nunmal Unicode/WideChar nicht rein.
Besonders perfide ist aber, dass CharInSet ebenfalls intern das SELBE macht und es somit absolut keinen Mehrwert erbringt, außer dass keine Compilerwarnung angezeigt wird. (die man aber alternativ auch einfach deaktivieren kann).



Und wenn man wirklich ein Array daraus machen würde, dann bemerkst du, dass es leider keinen "Standard-Operator" IN für Integer+Array gibt.
Delphi-Quellcode:
function ArrayOf(Values: array of Integer): TArray<Integer>;
begin
  ...
end;

validSetup := (samplesPerSecond in ArrayOf([48, 96]));
Leider gibt es in Delphi (SysUtils, Math, ...) auch keine fertige Funktion dafür,
so wie z.B. aus den StrUtils das B := MatchStr(S, ['a', 'bb']); .

OK, gibt es doch, aber ob man B := TArray.Contains<Integer>([123, 456], s); wirklich als schöne Lösung ansehn will?
Zu beachten ist auch, dass bei dieser TArray-Klasse einige/viele Methoden ausschließlich mit sortieren Arrays funktionieren.
$2B or not $2B

Geändert von himitsu ( 6. Sep 2024 um 23:21 Uhr)
  Mit Zitat antworten Zitat