Как заставить String.Format не анализировать {0} - PullRequest
2 голосов
/ 23 июля 2010

Я пишу инструмент для генерации кода, который часто будет иметь строки типа

StringBuilder sp = new Stringbuilder();
sp.AppendFormat("        public {0}TextColumn()\n", className);
sp.AppendLine("        {"
sp.AppendLine("            Column = new DataGridViewTextBoxColumn();");
sp.AppendFormat("            Column.DataPropertyName = \"{0}\";\n", columnName);

Однако у меня возникает проблема, когда я сталкиваюсь с такой строкой.

sp.AppendFormat("return String.Format(\"{0} = '{0}'\", cmbList.SelectedValue);", columnName);

Я хочу, чтобы первая {0} сменила значение columnName, но я хочу, чтобы секунда {0} осталась одна, чтобы внутренний String.Format обработал ее правильно.

Как мне это сделать?

Ответы [ 5 ]

13 голосов
/ 23 июля 2010

Используйте двойные фигурные скобки:

string result = string.Format("{{Ignored}} {{123}} {0}", 543);
7 голосов
/ 23 июля 2010

Фигурные скобки могут быть экранированы с помощью двух фигурных скобок. Документация string.Format гласит:

Чтобы указать один буквенный символ скобки в формате, укажите два начальных или конечных символа скобок; то есть "{{" или "}}".

В вашем примере это будет

sp.AppendFormat("return String.Format(\"{0} = '{{0}}'\",cmbList.SelectedValue);", 
    columnName);
3 голосов
/ 23 июля 2010

Используйте "{{0}}".Это приведет к строке "{0}"

3 голосов
/ 23 июля 2010
sp.AppendFormat("return String.Format(\"{0} = '{{0}}'\", cmbList.SelectedValue);", columnName);
1 голос
/ 23 июля 2010
String.Format(\"{0} = '{{0}}'\",
...