2012-03-22 58 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