使用格式字符串自动增量

时间:2012-03-22 03:52:10

标签: c# .net format string-formatting

每个人都知道使用Format方法的典型方法是

string res = string.format("<Field Name='Title'>{0}</Field>", "SomeValue");

{0}将变为SomeValue

对于每个后续参数,您只需增加数字,以便下一个参数可能如下所示

string res = string.format("<Field Name='Title'>{0}</Field><Field Name='FirstName'>{1}</Field>", "SomeValue", "SomeValue1");

我遇到的问题是,每当我对xml中的参数进行更改时,我都要尝试构建,我需要经历并重新排序格式字符串值,即:{1}变为{{1} },{2}变为{2}等等。

我想知道的是,是否有某种方法我可以省略占位符中的整数值,格式函数可能能够根据传入的参数索引计算出订单?

4 个答案:

答案 0 :(得分:1)

我不确定某个方法,但是你可以使用某种正则表达式,并根据命名字符串而不是索引替换它,但这并不是很漂亮。

另一种解决方案是以不同方式填充参数。例如,如果0点正在改变,那么只需在参数列表的开头添加新参数而不是仅将其添加到结尾,而不是重新编号。但是,这仍然需要重写代码。

最后,当您可以使用XMLDocuments和XMLWriters时,为什么要手动格式化XML?这将允许您以更加可控的方式输入这些值(可能没有看到周围的代码,我无法肯定地说)

答案 1 :(得分:1)

var fields = new Dictionary<string, string>
                 {
                     {"Title", "someTitle"},
                     {"FirstName", "Johnny"},
                     {"LastName", "Depp"}
                 };

var res = string.Join("", fields.Select(kvp => string.Format("<Field Name='{0}'>{1}</Field>",
                                                             kvp.Key,
                                                             kvp.Value)));

答案 2 :(得分:0)

使用Resharper等重构工具。它将在String.Format为您重新格式化。没有固有的方法来做你所要求的。

Resharper将允许您在任意位置插入元素并重新排序索引。它也允许您删除。

答案 3 :(得分:0)

或者,您可以使用StringTemplate