在大型文本模板中替换令牌的最佳方法

jer*_*mcc 13 .net c#

我有一个大文本模板,需要将标记化的部分替换为其他文本.令牌看起来像这样:## USERNAME ##.我的第一直觉只是使用String.Replace(),但是有更好,更有效的方法还是已经为此优化的Replace()?

Gre*_*man 12

你正在寻找System.Text.RegularExpressions.Regex.Replace() - 如果你的令牌很奇怪,你需要一个正则表达式来找到它们.

某种灵魂做了一些性能测试,在Regex.Replace(),String.Replace()和StringBuilder.Replace()之间,String.Replace()实际上名列前茅.


Sla*_*avo 7

我必须这样做的唯一情况是发送模板化的电子邮件.在.NET中,MailDefinition类提供了开箱即用的功能.这就是你创建模板化消息的方式:

MailDefinition md = new MailDefinition();
md.BodyFileName = pathToTemplate;
md.From = "test@somedomain.com";

ListDictionary replacements = new ListDictionary();
replacements.Add("<%To%>", someValue);
// continue adding replacements

MailMessage msg = md.CreateMailMessage("test@someotherdomain.com", replacements, this);
Run Code Online (Sandbox Code Playgroud)

在此之后,将通过替换模板中的值来创建msg.Body.我想你可以看一下使用Reflector :)的MailDefinition.CreateMailMessage().很抱歉有点偏离主题,但如果这是你的情景,我认为这是最简单的方法.