2009-07-11 6 views
4

J'utilise System.IO.FIle.ReadAllText() pour obtenir le contenu de certains fichiers modèles que j'ai créés pour le contenu de l'e-mail. Ensuite, je veux faire un remplacement sur certains jetons dans les fichiers afin que je puisse ajouter du contenu dynamique au modèle.Pourquoi est-ce que je ne peux pas String.Replace() sur une chaîne IO.File.ReadAllText()?

Voici le code que je l'ai, il me semble que cela devrait fonctionner très bien ...

Dim confirmUrl As String = Request.ApplicationPath & "?v=" & reg.AuthKey 
Dim text As String = IO.File.ReadAllText(_ 
    ConfigurationManager.AppSettings("sign_up_confirm_email_text").Replace("~", _ 
    Request.PhysicalApplicationPath)) 
Dim html As String = IO.File.ReadAllText(_ 
    ConfigurationManager.AppSettings("sign_up_confirm_email_html").Replace("~", _ 
    Request.PhysicalApplicationPath)) 

text.Replace("%%LINK%%", confirmUrl) 
text.Replace("%%NAME%%", person.fname) 

html.Replace("%%LINK%%", confirmUrl) 
html.Replace("%%NAME%%", person.fname) 

Pour une raison quelconque, je ne peux pas obtenir le %% LINK %% et %% NOM %% Remplacer() appels pour fonctionner correctement. J'ai vérifié pour voir si c'était lié à l'encodage, donc j'ai fait chaque fichier UTF-8. Et aussi utilisé la surcharge d'encodage forcé de ReadAllText (String, Encoding) et toujours pas de dés. Des idées?

Répondre

13

Le problème est que les chaînes sont immuables dans .NET. Donc, votre code de remplacement devrait ressembler à:

text = text.Replace("%%LINK%%", confirmUrl); 
text = text.Replace("%%NAME%%", person.fname); 

html = html.Replace("%%LINK%%", confirmUrl); 
html = html.Replace("%%NAME%%", person.fname); 
+0

D'oh! C'était idiot de ma part. Merci tout le monde. – sholsinger

+2

Beaucoup soutiendraient qu'ayant Remplacer() soit une fonction non-statique était idiot des concepteurs .NET, donc ne vous sentez pas si mal ;-) –

+1

Oui, je pense que * chaque développeur * .NET (et Java aussi, si Je me souviens bien) a couru dans ce à un moment donné. Même en sachant parfaitement l'immutabilité des cordes. Bon sang, j'ai * toujours * oublié d'utiliser la valeur de retour parfois. – JulianR

Questions connexes