Фигурные скобки в строке {0}

Я часто вижу фигурные скобки в строке, обычно содержащей число, например:

string something = "I have {0} cats";

Хотя я могу понять, что это значит, я могу сказать, что никогда не читал никакой документации, касающейся его использования. Строковая документация С#, похоже, лишена какой-либо информации, относящейся к ним. Может кто-то указать мне верное направление?


person m.edmondson    schedule 17.03.2011    source источник
comment
Стоит отметить, что с введением интерполированных строк фигурные скобки могут быть появляется намного больше в строках - следите за $ в начале строки. Вот хорошее объяснение.   -  person Ben    schedule 30.03.2016


Ответы (6)


Используется в string.Format в качестве заполнителя для параметра значения. string.Format("У меня {0} кошек", 5); печатает "У меня 5 кошек"

Таким образом, вы можете использовать string.Format(something, 5); и получить тот же результат, что и выше

person Ryan Bennett    schedule 17.03.2011

Это строка обычного формата, используемая String.Format и называемая "составным форматированием". . Дополнительные сведения об этом см. здесь.

person Matteo Italia    schedule 17.03.2011

* В C# 6.0 и его друзьях фигурные скобки больше не используются только для string.Format! Теперь они могут обозначать интерполированные строки, где вы можете смешивать объекты и код C# без всех накладных расходов string.Format и {0} {1} {2}.

ПРИМЕЧАНИЕ. Интерполированные строки начинаются со знака доллара: $

С справочной страницы по языку, указанной выше. :

Используется для построения строк. Интерполированная строка выглядит как шаблонная строка, содержащая интерполированные выражения. Интерполированная строка возвращает строку, которая заменяет содержащиеся в ней интерполированные выражения их строковыми представлениями.

Аргументы интерполированной строки легче понять, чем строку составного формата. Например, интерполированная строка

Console.WriteLine($"Name = {name}, hours = {hours:hh}");

содержит два интерполированных выражения: '{name}' и '{hours:hh}'. Эквивалентная строка составного формата:

Console.WriteLine("Name = {0}, hours = {1:hh}", name, hours);

Примечание. Если вы не знали, Console.WriteLine имеет своего рода встроенный string.Format, который может быть неочевидным в приведенном выше примере, если вы этого не понимаете.

Если вы хотите получить ту же строку, не полагаясь на волшебство Console.WriteLine, может быть проще прочитать, что это...

string message = $"Name = {name}, hours = {hours:hh}"; // interpolated

... эквивалентно...

string message = string.Format("Name = {0}, hours = {1:hh}", name, hours); // old school

Структура интерполированной строки:

$"<text> {<interpolated-expression> [,<field-width>] [<:format-string>] } <text> ..."
где:

  • field-width — целое число со знаком, указывающее количество символов в поле. Если он положительный, поле выравнивается по правому краю; если отрицательный, выравнивание по левому краю.
  • format-string – это строка формата, соответствующая типу форматируемого объекта. Например, для значения DateTime это может быть строка стандартного формата даты и времени, например "D" или "d".

Вы можете использовать интерполированную строку везде, где можно использовать строковый литерал. Интерполированная строка оценивается каждый раз, когда выполняется код с интерполированной строкой. Это позволяет вам разделить определение и оценку интерполированной строки.

Чтобы включить фигурную скобку ("{" или "}") в интерполированную строку, используйте две фигурные скобки, "{{" или "}}".


* Как указывает @Ben в комментарии выше. (Извините, пропустил это по пути.)

person ruffin    schedule 07.06.2017

Почти наверняка позже он будет использован в вызове String.Format, где пронумерованные заполнители заменены дополнительными параметрами:

string something = "I have {0} cats";
int myNumCats = 2
var theResult = String.Format(something,myNumCats);
person Jamiec    schedule 17.03.2011

Проверьте string.format:

http://msdn.microsoft.com/en-us/library/fht0f5be.aspx

person camainc    schedule 17.03.2011

Проверьте http://msdn.microsoft.com/es-es/library/b1csw23d%28v=vs.80%29.aspx, это документация для метода string.format, это метод, используемый для замены {0} значением.

person ryudice    schedule 17.03.2011