2012-03-22 57 views
1

正如每个人都知道要使用的格式方法的典型方式是与格式字符串自动递增

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

我遇到的问题是,任何时候我改变参数我试图建立我需要通过并重新排序格式字符串值,即:{1}变为{2},{2}变成{3}等等。

我想知道的是,如果有一种方法可以省略占位符的整数值,并且格式化函数可能能够根据传入参数的索引计算出顺序?

+1

你不应该需要重新排序在调用Format的任何内容时,只需将新的{2}添加到需要新值的字符串中,并在参数列表的末尾放置需要引用的新变量即可。 – GCaiazzo 2012-03-22 04:02:12

回答

0

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

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

1

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

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

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

+0

关于一切的公平点,我收集它可能是不可能的,但这是我继承的代码,所以我真的不想坐在这里,并重写它的大部分。你知道它是什么样的... – 2012-03-22 04:06:28

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

如果字段值总是索引,你可以使用string []而不是Dictionary和fields.Select((field,index)=> string.Format(“ {1}“,field,index)) – SimpleVar 2012-03-22 04:20:29