Je construis actuellement ce petit moteur de gabarit. Il prend une chaîne contenant le modèle en paramètre, et un dictionnaire de "tags, valeurs" pour remplir le modèle.mise en œuvre du moteur de gabarit
Dans le moteur, je n'ai aucune idée des étiquettes qui seront dans le gabarit et celles qui ne le seront pas.
Je suis actuellement en train d'itérer (foreach) sur le dictionnaire, en analysant ma chaîne que j'ai mise dans un constructeur de chaînes, et en remplaçant les étiquettes dans le modèle par leur valeur correspondante.
Existe-t-il un moyen plus efficace/pratique de le faire? Je sais que le principal inconvénient est que le stringbuilder est analysé à chaque fois entièrement pour chaque balise, ce qui est assez mal ...
(je vérifie également, bien que non inclus dans l'échantillon, après le processus que mon modèle ne ne contient aucune balise plus Ils sont tous formated de la même manière. @@ 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();
Réponses:
@Marc:
string template = "Some @@[email protected]@ text in a @@[email protected]@ template";
StringDictionary data = new StringDictionary();
data.Add("foo", "value1");
data.Add("bar", "value2");
data.Add("foo2bar", "value3");
Sortie: "texte dans un modèle de valeur2"
au lieu de: "Certains @@ foobar @@ texte dans un modèle de valeur2"
(réponse au commentaire) –
Fine ... use Dictionary au lieu de StringDictionary et il va lancer une erreur pour les clés manquées ... pas compliqué. –