string.Format() un peu perdu ?

Lors de l'utilisation d'une chaîne comprenant des éléments à remplacer, la méthode string.Format() est fort pratique:

 
string maChaineInitiale = "mon super utilisateur {0} est heureux, il a gagné {1} points !";
 
string maChaineFinale = string.Format(maChaineInitiale, monUtilisateur.NomComplet, concours.Points);
 
Console.WriteLine(maChaineFinale);

>> mon super utilisateur Jay Delachance est heureux, il a gagné 10000 points !

En gardant le même système, vous pourriez vouloir générer par exemple un bout de code javascript (je travaillais sur un petit composant de stats Xiti incorporé dans les sites WCM, le code suivant est fantaisiste et simplifié ;)) :

string js = @"if (p1 != null && p2 != null) { mystr = ""&p1={0}&p2={1}""; }";
string js2 = string.Format(js, "titi", "toto");
 

Ici, je cherche juste à générer une partie d'une méthode javascript qui comporte 2 variables récupérées par le Format(). Et là, ... c'est le drame !

Une erreur survient : FormatException : Input string was not in a correct format.

Questionnement: mais d'où vient le souci ? Le cas initial était plus complexe, et la solution pas forcément évidente. Et pourtant... Il suffit tout simplement de doubler les accolades qui ne sont pas à prendre en compte dans le Format, car sinon la méthode ne retrouve plus ses petits. Et voici ce que ça donne alors :

string js = @"if (p1 != null && p2 != null) {{ mystr = ""&p1={0}&p2={1}""; }}";
string js2 = string.Format(js, "titi", "toto");
 
Le problème cependant provient des cas où l'on charge dynamiquement des chaînes de caractères à la méthode Format (récupération via un fichier, une base de données, ...). En effet, il faudra alors voir à doubler les accolades (mais pas celles vouées à accueillir les arguments supplémentaires). 
 
Gat, SharePoint is .Net !
 

Commentaires

Laisser un commentaire





Validation Image CAPTCHA