使用格式字符串自动递增
本文关键字:字符串 格式 | 更新日期: 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