我正在尝试创建一个实用程序方法,以在模板文件上执行类似邮件合并的功能。由于字符串是不可变的,我不确定我是否正确编写了 - 有人可以看一眼并给我反馈吗?
public static string LoadTemplateFile(string fileName,
NameValueCollection mergeFields)
{
string result = System.IO.File.ReadAllText(fileName);
if (mergeFields != null)
{
for (int index = 0; index < mergeFields.Count; index++)
{
result = result.Replace(mergeFields.Keys[index],
mergeFields[index]);
}
}
return result;
}
答案 0 :(得分:10)
使用StringBuilder而不是字符串可能会更好。
public static string LoadTemplateFile(
string fileName, NameValueCollection mergeFields)
{
System.Text.StringBuilder result = new System.Text.StringBuilder(
System.IO.File.ReadAllText(fileName));
if (mergeFields != null)
{
for (int index = 0; index < mergeFields.Count; index++)
{
result.Replace(mergeFields.Keys[index],
mergeFields[index]);
}
}
return result.ToString();
}
答案 1 :(得分:4)
看起来你正试图
如果是这样的话,那么这将是正常的。
我唯一真实的反馈是,根据替换名称/值对的数量,您将创建大量临时字符串。这对于小文件来说可能很好,但是一旦你开始将相对较大的文件加载到你的应用程序中,你可能会看到明显的差异。
更好的方法是使用StringBuilder并对该对象执行Replace调用。它可以减少不必要的临时字符串的创建。
答案 2 :(得分:1)
使用StringBuilder而不是string。这是我唯一的建议,它的速度更快。