我经常在通常包含数字的字符串中看到花括号,例如:
string something = "I have {0} cats";
虽然我可以弄清楚这意味着什么,但我可以说我从未阅读过任何与其使用相关的文档。c# 字符串文档似乎没有与这些相关的任何信息。谁能指出我正确的方向?
我经常在通常包含数字的字符串中看到花括号,例如:
string something = "I have {0} cats";
虽然我可以弄清楚这意味着什么,但我可以说我从未阅读过任何与其使用相关的文档。c# 字符串文档似乎没有与这些相关的任何信息。谁能指出我正确的方向?
在 string.Format 中用作值参数的占位符。string.Format("我有 {0} 只猫", 5); 打印“我有 5 只猫”
所以你可以使用 string.Format(something, 5); 并得到与上面相同的结果
它是 使用的普通格式字符串String.Format
,称为“复合格式”。有关它的更多信息,请查看此处。
*使用 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 在上面的评论中指出的那样。(对不起,在进去的路上错过了。)
几乎可以肯定它后来在String.Format
调用中使用,其中编号占位符被附加参数替换:
string something = "I have {0} cats";
int myNumCats = 2
var theResult = String.Format(something,myNumCats);
查看 string.format:
检查http://msdn.microsoft.com/es-es/library/b1csw23d%28v=vs.80%29.aspx,它是 string.format 方法的文档,它是用于替换 {0} 的方法有一个价值。