Фигурные скобки в строке {0} - PullRequest
11 голосов
/ 17 марта 2011

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

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

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

Ответы [ 6 ]

20 голосов
/ 17 марта 2011

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

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

12 голосов
/ 17 марта 2011

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

5 голосов
/ 08 июня 2017

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

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

С ссылка на язык, ссылка на которую приведена выше :

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

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

Console.WriteLine($"Name = {name}, hours = {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».

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

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


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

3 голосов
/ 17 марта 2011

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

string something = "I have {0} cats";
int myNumCats = 2
var theResult = String.Format(something,myNumCats);
1 голос
/ 17 марта 2011
0 голосов
/ 17 марта 2011

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

...