У меня есть проблема, которая должна быть тривиальной, но на которую я не могу найти элегантного ответа.
У меня есть экземпляр IList<string>
, и я хочу получить разделенную запятыми строку всех его различных (без учета регистра) значений.
Я подумал, что просто воспользуюсь помощником string.Join
, так как у него есть хорошая перегрузка, которая принимает IEnumerator<string>
в качестве параметра. К сожалению, я вижу, что попал в загвоздку: spring4d переопределяет IEnumerator<T>
и, конечно же, везде использует свой собственный тип.
В результате следующий код не компилируется:
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;
Присвоение distinct
завершается ошибкой с E2010 Incompatible types: 'System.IEnumerator<System.string>' and 'Spring.Collections.Extensions.TDistinctIterator<System.string>'
В качестве альтернативы, если я удалю пространство имен из отдельного, вызов string.Join
завершится ошибкой.
Любая идея, как я должен это делать? За исключением ручного прохождения итерации и выполнения соединения вручную?