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
CharInSet 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.