Ich habe ein Problem, das trivial sein sollte, zu dem ich keine elegante Antwort finden kann.Spring4d: Spring.Collections.IEnumerator und System.IEnumerator
Ich habe eine Instanz eines IList<string>
und ich möchte eine Komma-getrennte Zeichenfolge aller eindeutigen (Groß- und Kleinschreibung) Werte erhalten.
Ich dachte, ich würde einfach den string.Join
Helfer dafür verwenden, da es eine nette Überlastung hat, die einen IEnumerator<string>
als Parameter akzeptiert. Leider habe ich einen Haken gefunden: spring4d definiert IEnumerator<T>
neu und verwendet natürlich seinen eigenen Typ.
Das Ergebnis ist, dass der folgende Code nicht kompiliert:
var
distinct: system.IEnumerator<string>;
begin
result := inherited GetToken;
if assigned(result) then
begin
if not Modules.Contains(STR_DID_SESSION_MODULE) then
Modules.Add(STR_DID_SESSION_MODULE);
distinct := TDistinctIterator<string>.Create(Modules, TIStringComparer.Ordinal);
result.CustomClaims.Items[STR_CLAIM_CUSTOM_MODULES] := string.Join(',', distinct);
end;
end;
Die Zuordnung zu distinct
nicht mit E2010 Incompatible types: 'System.IEnumerator<System.string>' and 'Spring.Collections.Extensions.TDistinctIterator<System.string>'
Alternativ kann, wenn ich den Namespace aus verschiedenen entfernen, dann ist es der Aufruf von string.Join
, fehlgeschlagen .
Irgendeine Idee, wie ich das tun sollte? Sie müssen nicht manuell durch die Iteration gehen und den Join manuell durchführen?
Vielen Dank, aber ich kann nirgendwo StringJoin finden? Ist es in einem separaten Zweig? – Stephane
Es ist hier in dieser Antwort - deshalb habe ich geschrieben "schreibe es selbst" - sonst hätte ich geschrieben "benutze es von ..." (vergessen, den ersten Parameter/das Komma auf den Anruf in der letzten Zeile obwohl übergeben) –
Sorry ... Lesefehler. – Stephane