Kann es sein, dass du das mit dem Enumerator noch nicht so ganz verstanden hast?

Wie wäre es so?
Delphi-Quellcode:
function TStringMacros.Replace(const Source: String): String;
var
CurrentValue: TPair<string, TFuncOfString>;
begin
Result := Source;
for CurrentValue in Self do
Result := StringReplace(Result, CurrentValue.Key, CurrentValue.Value(), [rfReplaceAll, rfIgnoreCase]);
end;