Автоматическое увеличение с форматной строкой - PullRequest
1 голос
/ 22 марта 2012

Как всем известно, типичный способ использования метода 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} и пр.

Что мне интересно, так это то, что если я могу опустить целочисленное значение из заполнителя, и функция форматирования сможет обработать порядок на основе индекса переданных параметров?

Ответы [ 4 ]

1 голос
/ 22 марта 2012
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)));
1 голос
/ 22 марта 2012

Я не уверен насчет метода, но вы можете использовать какое-то регулярное выражение и заменить его на основе именованных строк вместо индексов, однако это не так красиво.

Другим решением было бы просто заполнить ваши параметры по-другому. Например, если точка 0 меняется, то вместо нумерации просто добавьте новый параметр в начало списка параметров, а не просто добавьте его в конец. Это все еще потребует переписывания кода, хотя.

Наконец, почему вы вручную форматируете XML, когда вы можете использовать XMLDocuments и XMLWriters? Это позволит вам вводить эти значения более контролируемым образом, возможно (я не могу сказать наверняка, не увидев код вокруг него)

0 голосов
/ 22 марта 2012

В качестве альтернативы вы можете использовать StringTemplate

0 голосов
/ 22 марта 2012

Используйте инструмент рефакторинга, такой как Resharper. Это сделает переформатирование в String.Format для вас. Не существует способа сделать то, что вы просите.

Resharper позволит вам вставлять элементы в произвольные места и изменять порядок индексов. Это также позволит вам удалить.

...