Если ваш шаблон большой и у вас много токенов, вы, вероятно, не хотите его обойти и заменить токен в шаблоне один за другим, так как это приведет к операции O (N * M), где N - это размер шаблона, а M - количество токенов для замены.
Следующий метод принимает шаблон и словарь пар ключей-значений, которые вы хотите заменить. Если инициализировать StringBuilder немного большим, чем размер шаблона, это должно привести к операции O (N) (т. Е. Ему не нужно увеличивать сам журнал N раз).
Наконец, вы можете переместить здание токенов в синглтон, так как его нужно сгенерировать только один раз.
static string SimpleTemplate(string template, Dictionary<string, string> replacements)
{
// parse the message into an array of tokens
Regex regex = new Regex("(##[^#]+##)");
string[] tokens = regex.Split(template);
// the new message from the tokens
var sb = new StringBuilder((int)((double)template.Length * 1.1));
foreach (string token in tokens)
sb.Append(replacements.ContainsKey(token) ? replacements[token] : token);
return sb.ToString();
}