Я сейчас создаю этот небольшой шаблонный движок.
Для заполнения шаблона требуется строка, содержащая шаблон в параметре, и словарь «тегов, значений».
В движке я понятия не имею, какие теги будут в шаблоне, а какие нет.
В настоящее время я выполняю итерацию (foreach) в словаре, анализирую строку, которую я поместил в построитель строк, и заменяю теги в шаблоне их соответствующими значениями.
Есть ли более эффективный / удобный способ сделать это?
Я знаю, что основным недостатком здесь является то, что stringbuilder анализируется каждый раз полностью для каждого тега, что очень плохо ...
(я также проверяю, хотя и не включен в пример, после того, как мой шаблон больше не содержит тегов. Все они отформатированы одинаково: @@ 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"