В настоящее время я создаю этот небольшой механизм шаблонов. Он принимает строку, содержащую шаблон в параметре, и словарь «тегов, значений» для заполнения шаблона.
В движке я понятия не имею, какие теги будут в шаблоне, а какие нет.
В настоящее время я повторяю (foreach) словарь, анализирую свою строку, которую я поместил в построитель строк, и заменяю теги в шаблоне их соответствующим значением.
Есть ли более эффективный/удобный способ сделать это? Я знаю, что основным недостатком здесь является то, что построитель строк каждый раз анализируется полностью для каждого тега, что довольно плохо...
(Я также проверяю, хотя и не включен в образец, после процесса, что мой шаблон больше не содержит никаких тегов. Все они отформатированы одинаково: @@tag@@)
//Dictionary<string, string> tagsValueCorrespondence;
//string template;
StringBuilder outputBuilder = new StringBuilder(template);
foreach (string tag in tagsValueCorrespondence.Keys)
{
outputBuilder.Replace(tag, tagsValueCorrespondence[tag]);
}
template = outputBuilder.ToString();
Ответы:
@Марк:
string template = "Some @@foobar@@ text in a @@bar@@ template";
StringDictionary data = new StringDictionary();
data.Add("foo", "value1");
data.Add("bar", "value2");
data.Add("foo2bar", "value3");
Вывод: "Некоторый текст в шаблоне value2"
вместо: "Некоторый текст @@foobar@@ в шаблоне value2"