我过去做过这件事。而不是使用.Contains
我只是调用.Replace(pattern, replacement)
每个可用的选项。在典型的面向用户(例如数据显示/输入)的应用程序中,用户永远不会注意到任何减速。
在尝试优化性能之前,您确实应该确认您有性能问题。你很可能在浪费时间。
测试数据:
使用下面的测试代码,您可以看到替换 25,000 个“书”中的 10 个值需要不到 2 秒,其中大部分是由写入控制台引起的(如果删除 Console.WriteLine(),运行时间会下降到 160 毫秒以下只需将书籍添加到 a List<String>()
)。对我来说似乎很容易接受。
String template = @"%index%. %title% - %author% [%isbn%] - %year%";
Dictionary<String, String> values = new Dictionary<String, String> { { "title", "A day in the life of..." }, { "author", "Joe S. Schmoe" }, { "year", "1945" }, { "isbn", "987-987-987-987-987" }, { "one", "1" }, { "two", "2" }, { "three", "3" }, { "four", "4" }, { "five", "5" }, { "six", "6" }, { "seven", "7" } };
String output = string.Empty;
Stopwatch watch = new Stopwatch();
watch.Start();
for (Int32 index = 0; index < 25000; index++) {
output = template;
foreach (String key in values.Keys) {
output = output.Replace("%" + key + "%", values[key]);
}
output = output.Replace("%index%", index.ToString());
Console.WriteLine(output);
}
watch.Stop();
Console.WriteLine("Elapsed time (ms): " + watch.ElapsedMilliseconds.ToString());