2009-07-11 33 views
4

System.IO.FIle.ReadAllText()を使用して、電子メールコンテンツ用に作成したテンプレートファイルの内容を取得しています。次に、テンプレート内に動的なコンテンツを追加できるように、ファイル内の特定のトークンに対してReplaceを実行したいとします。ここでIO.File.ReadAllText()文字列でString.Replace()を実行できないのはなぜですか?

は、私が持っているコードが...それだけで正常に動作する必要がありますように、それは私には思える、私は%% LINK %%を得ることができないいくつかの理由

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) 

と%% NAME %%置き換え()呼び出しが正しく動作するようにします。私はそれがエンコーディング関連であるかどうかを調べたので、各ファイルをUTF-8にしました。また、ReadAllText(String、Encoding)の強制的なエンコードオーバーロードを使用し、ダイスも使用しませんでした。何か案は?

答えて

13

問題は、文字列が.NETでは不変であることです。置換コードは次のようになります。

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!それは私の愚かだった。みんな、ありがとう。 – sholsinger

+2

多くの人が、Replace()を静的でない関数にすることは.NETデザイナーには馬鹿だと主張しているので、あまり気にしないでください;-) –

+1

すべての.NET開発者(とJava私は正しく思い出しました)は、いつかこれに遭遇しました。文字列の不変性を完全に知っている。地獄、私はまだ*戻り値を使用することを忘れています。 – JulianR

関連する問題