13

我经常在通常包含数字的字符串中看到花括号,例如:

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

虽然我可以弄清楚这意味着什么,但我可以说我从未阅读过任何与其使用相关的文档。c# 字符串文档似乎没有与这些相关的任何信息。谁能指出我正确的方向?

4

6 回答 6

21

在 string.Format 中用作值参数的占位符。string.Format("我有 {0} 只猫", 5); 打印“我有 5 只猫”

所以你可以使用 string.Format(something, 5); 并得到与上面相同的结果

于 2011-03-17T16:57:18.723 回答
12

它是 使用的普通格式字符串String.Format,称为“复合格式”。有关它的更多信息,请查看此处

于 2011-03-17T16:58:41.850 回答
8

*使用 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 在上面的评论中指出的那样。(对不起,在进去的路上错过了。)

于 2017-06-07T22:43:06.820 回答
3

几乎可以肯定它后来在String.Format调用中使用,其中编号占位符被附加参数替换:

string something = "I have {0} cats";
int myNumCats = 2
var theResult = String.Format(something,myNumCats);
于 2011-03-17T16:57:43.640 回答
1

查看 string.format:

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

于 2011-03-17T16:57:34.220 回答
0

检查http://msdn.microsoft.com/es-es/library/b1csw23d%28v=vs.80%29.aspx,它是 string.format 方法的文档,它是用于替换 {0} 的方法有一个价值。

于 2011-03-17T16:57:47.593 回答