Къдрави скоби в низ {0}

Често виждам фигурни скоби в низ, обикновено съдържащ число, като например:

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

Въпреки че мога да разбера какво означава това, мога да кажа, че никога не съм чел никаква документация, свързана с употребата му. Документацията за низове на c# изглежда е лишена от всякаква информация, свързана с тях. Може ли някой да ме насочи в правилната посока?


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> ..."
където:

  • ширина на полето е цяло число със знак, което показва броя на знаците в полето. Ако е положителен, полето е подравнено вдясно; ако е отрицателен, подравнен вляво.
  • 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