Как убрать фигурные скобки (фигурные скобки) в строку формата в .NET - PullRequest
923 голосов
/ 18 сентября 2008

Как убрать скобки при использовании string.Format. Например:

String val = "1,2,3"
String.Format(" foo {{0}}", val); 

В этом примере не выдается исключение, а выводится строка foo {0}

Есть ли способ избежать скобок?

Ответы [ 9 ]

1217 голосов
/ 18 сентября 2008

Чтобы вывести foo {1, 2, 3}, вам нужно сделать что-то вроде:

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);

Для вывода { вы используете {{, а для вывода } вы используете }}.

198 голосов
/ 26 февраля 2013

Да, чтобы вывести { в string.Format вы должны экранировать его следующим образом {{

Итак, это

String val = "1,2,3";
String.Format(" foo {{{0}}}", val);

выдаст "foo {1,2,3}".

НО вы должны знать об ошибке проектирования в C #, которая заключается в том, что, следуя приведенной выше логике, вы предполагаете, что следующий код выведет {24.00}

int i = 24;
string str = String.Format("{{{0:N}}}", i); //gives '{N}' instead of {24.00}

Но это печатает {N}. Это связано с тем, что C # анализирует escape-последовательности и форматирует символы. Чтобы получить желаемое значение в приведенном выше случае, вы должны использовать это вместо.

String.Format("{0}{1:N}{2}", "{", i, "}") //evaluates to {24.00}

Справочные статьи String.Format должен получить и FAQ по форматированию строк

72 голосов
/ 18 сентября 2008

Почти там! Escape-последовательность для фигурной скобки: {{ или }}, поэтому для вашего примера вы должны использовать:

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
22 голосов
/ 22 марта 2010

Вы можете использовать двойные открытые скобки и двойные закрывающие скобки, которые будут отображать только одну скобку на вашей странице.

12 голосов
/ 20 июня 2017

Экранирование фигурные скобки И использование интерполяции строк создает интересную проблему. Вам необходимо использовать четырехкратные скобки , чтобы избежать интерполяции строк * парсинга 1008 * и парсинга string.format.

Выходящие скобки: строковая интерполяция $ ("") и String.Format

string localVar = "dynamic";
string templateString = $@"<h2>{0}</h2><div>this is my {localVar} template using a {{{{custom tag}}}}</div>";
string result = string.Format(templateString, "String Interpolation");

// OUTPUT: <h2>String Interpolation</h2><div>this is my dynamic template using a {custom tag}</div>
6 голосов
/ 18 апреля 2017

Пришел сюда в поисках того, как построить строки json ad-hoc (без сериализации класса / объекта) в C #. Другими словами, как избежать скобок и кавычек при использовании Интерполированные строки в C # и " дословные строковые литералы " (строки в двойных кавычках с префиксом @), например ... 1005 *

var json = $@"{{""name"":""{name}""}}";
5 голосов
/ 06 мая 2016
[TestMethod]
public void BraceEscapingTest()
{
    var result = String.Format("Foo {{0}}", "1,2,3");  //"1,2,3" is not parsed
    Assert.AreEqual("Foo {0}", result);

    result = String.Format("Foo {{{0}}}", "1,2,3");
    Assert.AreEqual("Foo {1,2,3}", result);

    result = String.Format("Foo {0} {{bar}}", "1,2,3");
    Assert.AreEqual("Foo 1,2,3 {bar}", result);

    result = String.Format("{{{0:N}}}", 24); //24 is not parsed, see @Guru Kara answer
    Assert.AreEqual("{N}", result);

    result = String.Format("{0}{1:N}{2}", "{", 24, "}");
    Assert.AreEqual("{24.00}", result);

    result = String.Format("{{{0}}}", 24.ToString("N"));
    Assert.AreEqual("{24.00}", result);
}
2 голосов
/ 03 января 2018

или вы можете использовать строковую интерполяцию c # следующим образом (функция доступна в C # 6.0)

var value = "1, 2, 3";
var output = $" foo {{{value}}}";
0 голосов
/ 11 апреля 2019

Моя цель:

Мне нужно было присвоить значение "{CR}{LF}" переменной string delimiter.

Код c #:

string delimiter= "{{CR}}{{LF}}";

Примечание. Для экранирования специальных символов обычно необходимо использовать. Для открытия фигурной скобки {используйте один дополнительный символ {{. Чтобы закрыть фигурную скобку}, используйте один дополнительный}}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...