Часто задаваемые вопросы о форматировании строк MSDN msdn.microsoft.com/en-us/netframework/aa569608 : Как записать фигурные скобки в форматах строк? Есть ли в фигурных скобках странные варианты поведения, о которых мне нужно знать? Как я могу использовать форматирование строки, чтобы написать что-то вроде "{42.00}"?
gerryLowry
1
К сожалению, вышеуказанная ссылка MSDN не работает. В настоящее время правильная ссылка выглядит как msdn.microsoft.com/en-us/library/… (см. Раздел QA внизу или выполните поиск «escape» на странице).
Пало Мраз
Ответы:
1283
Для вывода foo {1, 2, 3}вы должны сделать что-то вроде:
string t ="1, 2, 3";string v =String.Format(" foo {{{0}}}", t);
Для вывода {вы используете {{и для вывода }вы используете }}.
или Теперь, вы также можете использовать интерполяцию строк C #, как это (функция доступна в C # 6.0)
Выходящие скобки: интерполяция строки $ ("") . это новая функция в C # 6.0
var inVal ="1, 2, 3";var outVal = $" foo {{{inVal}}}";//Output will be: foo {1, 2, 3}
«{{» обрабатывается как экранированный символ скобки в строке формата.
Исллава
5
Но если вы хотите добавить форматирование значения к вашему строковому спецификатору, вам также необходимо прочитать ответ от Гуру Кара ниже.
Ник
Читайте раздел Escapeing Braces в официальной документации Composite Formatting .
Джеппе Стиг Нильсен
8
Это также работает в новой интерполяции строк в C # 6 ( $"a = {{ {a} }}")
Mahmoodvcs
Более конкретный способ интерполяции строк в C # 6, удвоение на фигурных работает следующим образом string v = $" foo {{{t}}}";. Если у вас есть другие символы для выхода, которые не являются фигурными, вы можете использовать комбинацию $ @string v2 = $@"\foo {{{t}}}\";
Nhan
209
Да, чтобы выводить {в 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 .
Выходящие скобки: строковая интерполяция $ ("") и 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>
Пришел сюда в поисках того, как построить строки json ad-hoc (без сериализации класса / объекта) в C #. Другими словами, как избежать скобок и кавычек при использовании Интерполированных строк в C # и « дословных строковых литералов » (строки в двойных кавычках с префиксом «@»), например ...
[TestMethod]publicvoidBraceEscapingTest(){var result =String.Format("Foo {{0}}","1,2,3");//"1,2,3" is not parsedAssert.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 answerAssert.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);}
Мне нужно присвоить значение "{CR}{LF}"для stringпеременной delimiter.
Код c #:
string delimiter="{{CR}}{{LF}}";
Примечание: чтобы экранировать специальные символы, как правило, вы должны использовать. Для открытия фигурной скобки {используйте один дополнительный символ {{. Чтобы закрыть фигурную скобку}, используйте один дополнительный}}.
Ответы:
Для вывода
foo {1, 2, 3}
вы должны сделать что-то вроде:Для вывода
{
вы используете{{
и для вывода}
вы используете}}
.или Теперь, вы также можете использовать интерполяцию строк C #, как это (функция доступна в C # 6.0)
Выходящие скобки: интерполяция строки $ ("") . это новая функция в C # 6.0
источник
$"a = {{ {a} }}"
)string v = $" foo {{{t}}}";
. Если у вас есть другие символы для выхода, которые не являются фигурными, вы можете использовать комбинацию $ @string v2 = $@"\foo {{{t}}}\";
Да, чтобы выводить
{
вstring.Format
вас, вы должны избежать этого, как это{{
Так это
будет выводить
"foo {1,2,3}"
.НО вы должны знать об ошибке проектирования в C #, которая заключается в том, что, следуя приведенной выше логике, вы предполагаете, что следующий код выведет {24.00}
Но это печатает {N}. Это связано с тем, что C # анализирует escape-последовательности и форматирует символы. Чтобы получить желаемое значение в приведенном выше случае, вы должны использовать это вместо.
Справочные статьи String.Format gottach и FAQ по форматированию строк
источник
string.Format( "{{{0}}}", i.ToString("N") );
что может быть более читабельным для некоторых.Почти готово! Последовательность выхода на скобе является
{{
или}}
так для примера вы будете использовать:источник
Вы можете использовать двойные открытые скобки и двойные закрывающие скобки, которые будут отображать только одну скобку на вашей странице.
источник
Избавление от фигурных скобок И использование интерполяции строк создает интересную проблему. Вы должны использовать четверные скобки, чтобы избежать синтаксического анализа и разбора интерполяции строк
string.format
.Выходящие скобки: строковая интерполяция $ ("") и String.Format
источник
Пришел сюда в поисках того, как построить строки json ad-hoc (без сериализации класса / объекта) в C #. Другими словами, как избежать скобок и кавычек при использовании Интерполированных строк в C # и « дословных строковых литералов » (строки в двойных кавычках с префиксом «@»), например ...
источник
источник
или вы можете использовать строковую интерполяцию c # следующим образом (функция доступна в C # 6.0)
источник
Выходящие скобки: интерполяция строки $ (""):
Теперь вы также можете использовать строковую интерполяцию c # следующим образом (функция доступна в C # 6.0)
источник
Моя цель:
Мне нужно присвоить значение
"{CR}{LF}"
дляstring
переменнойdelimiter
.Код c #:
Примечание: чтобы экранировать специальные символы, как правило, вы должны использовать. Для открытия фигурной скобки {используйте один дополнительный символ {{. Чтобы закрыть фигурную скобку}, используйте один дополнительный}}.
источник