Nicht nur das. Es sind zwei verschiedene Typen.
System.Generics.Collections:
TArray = class
mit den Klassenmethoden<T>
System:
TArray<T> = array of T;
ohne irgendwas
(Gut, ein Sortierungscode in System ist vielleicht zuviel, aber dann eben den Typen einfach in eine andere Unit, als TSortedArray<T> TManagedArray<T> mit Find/Exists/Sort/Pop/Push/Shift/Move/...)
Einen
ClassHelper RecordHelper für Arrays funktioniert inzwischen,
aber nicht in der generischen Variante.
Delphi-Quellcode:
type
TArrayHelper<T> = record helper for TArray<T> // [dcc32 Fehler] E2508 Typparameter sind bei diesem Typ nicht erlaubt
procedure Sort;
end;
Und das kompiliert zwar, geht aber auf den falschen Typen.
Delphi-Quellcode:
TArrayHelper = class helper for TArray
procedure Sort<T>;
end;
Wenn du sowas haben willst, mußt du es also selber implementieren, für jeden einzelnen Typen.
Delphi-Quellcode:
type
TByteArrayHelper = record helper for TArray<Byte>
procedure Sort;
end;
var
A: TArray<Byte>;
begin
A.Sort;
Und die Klassenvervollständigung kannst du auch vergessen, weil sie immernoch beim < abraucht.
Bestimmt kann man noch durch Vererbung oder einen Dummyklasse bissl gemeinsamen Code zentralisieren
und es über ein Code-LiveTemplate bereitstellen.
[add]
Oder ein Record, der sich wie ein Array verhält.
Wenn du noch bis zum Wochenende warten kannst ... ich bastle mir eh grade was, da das threadsave von Emba garnicht wirklich threadsave ist (seit jahren ignorierte Bugs und ich hab einen Anwendungsfall, wo sekündlich mehrere hundert Aktionen sicher nötig wären)
und das sonst passendende zwar ginge, aber von Haus aus nicht als thradsave implementiert ist.
(das was ich weglassen wollte, weil für mich nicht nicht nötig, wäre nicht der große Mehraufwand)