解决模板项的值又被替换的问题(C# string.Format)

很多 CMS 喜欢生成静态页面,其中最普遍的方式就是替换模板中的字符串。但普遍又存在一个问题,就是重复替换,也就是替换了被替换字符串中的内容,:(,太绕口了,举个例子。

string format = "{title},{content}";
string str = format;
str = str.Replace("{title}", "{content}"); // 文章标题就是 {content}
str = str.Replace("{content}", "内容");
Response.Write(str);

假设 {title}、{content} 是模板的项,对应文章的标题和内容,后面要替换它的。

有个人很“讨厌”,他把文章标题写成“{content}”,现在经过第二句后 str 变成了“{content},{content}”,经过第三句后就变成了“内容,内容”。

可是我们希望的结果是:{content},内容

解决方法是利用 string.Format

首先,我们不能用 {title} 这样的模板项了,而应该将 {} 中的内容改为数字索引,从 0 开始的。

现在那个捣蛋的人发现我们将模板项由 {title} 改为 {0} 了,将 {content} 改为 {1} 了,于是他把标题也由 {content} 改为 {1} 了。

可是我们不怕他:

string format = "{0},{1}";
string[] items = new string[] { "{1}", "内容" };
string str = string.Format(format, items);
Response.Write(str);

输出结果为:{1},内容

问题

{} 中的数字是不是必须按从左至右、从小到大来写呢?

不必,也就是说 {1}{0} 这个模板也是正确的。

同一个索引,可否有多个呢?比如 {1}{1}

可以。

{} 中的数字可否有空隙呢?比如是 {0}{3}。

可以,但是,如上参数列表要有 4 个,只是第 2、3 个没被 String.Format 使用。

{} 中的数字中否必须从 0 开始呢?

不必,就如上问题一样,可以有空隙,那么我们可以把 0 空了。

{} 中的数字是不是只能是 0 - 9 呢?

不是,10、11、12 ……都可以。只是要注意,同上面一样,参数的个数要 >= {} 中最大数 + 1

更高级的内容请参见:http://msdn.microsoft.com/zh-cn/library/txafckwd(v=VS.80).aspx。

你可能感兴趣的