使用格式字符串自动递增

本文关键字:字符串 格式 | 更新日期: 2023-09-27 18:28:31

大家都知道,使用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}变成{2}{2}变成{3},依此类推。

我想知道的是,是否有某种方法可以省略占位符中的整数值,而format函数可能能够根据传入参数的索引来计算顺序?

使用格式字符串自动递增

我不确定一个方法,但你可以使用某种regex,并根据命名字符串而不是索引来替换它,但这并不好看。

另一个解决方案是以不同的方式填充参数。例如,如果0点正在更改,则不需要重新编号,只需将新参数添加到参数列表的开头,而不是添加到末尾。不过,这仍然需要重新编写代码。

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

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)));

使用重构工具,如Resharper。它将在String.Format中为您重新格式化。按照你的要求去做是没有内在的方法的。

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

或者,您可以使用StringTemplate