我经常看到花括号中字符串通常包含一个数字,如:大括号{0}
string something = "I have {0} cats";
虽然我可以算出来这是什么意思,我可以说我从来没有读过任何与其用途有关的文件。 C#字符串文档似乎没有任何有关这些信息。任何人都可以将我指向正确的方向吗?
我经常看到花括号中字符串通常包含一个数字,如:大括号{0}
string something = "I have {0} cats";
虽然我可以算出来这是什么意思,我可以说我从来没有读过任何与其用途有关的文件。 C#字符串文档似乎没有任何有关这些信息。任何人都可以将我指向正确的方向吗?
用于string.Format作为值参数的占位符。 string.Format(“我有{0}猫”,5);打印“我有5只猫”
所以你可以使用string.Format(东西,5);并得到同样的结果如上
退房的String.Format:
它几乎可以肯定,后来在String.Format
电话,其中编号的占位符被附加参数替代使用:
string something = "I have {0} cats";
int myNumCats = 2
var theResult = String.Format(something,myNumCats);
检查http://msdn.microsoft.com/es-es/library/b1csw23d%28v=vs.80%29.aspx,它是string.format方法的文档,它是用于用值替换{0}的方法。
*与C#6.0 &朋友,花括号不仅仅是string.Format
!现在,它们可以表示为interpolated strings,您可以在其中混合使用C#对象和代码,而不需要所有的开销。
注:插值字符串美元符号开始:$
从the language reference page linked above:
用于构造字符串。插入的字符串看起来像包含插值表达式的 模板字符串。内插字符串 返回一个字符串,该字符串用它们的字符串表示法替换其包含的内插的 表达式。
内插字符串的参数比 更容易理解复合格式字符串。例如,内插的字符串
Console.WriteLine($"Name = {name}, hours = {hours:hh}");
包含两个插值表达式, '{名称}' 和 '{小时: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> ..."
其中:
- 场宽度是一个有符号的整数,用于指示字符的数量在该领域的专家。如果是肯定的,该字段是右对齐的;如果是负数,则为左对齐。
- 格式字符串是适用于被格式化对象类型的格式字符串。例如,对于DateTime值,它可能是标准的日期和时间格式字符串,如“D”或“d”。
您可以在任何可以使用字符串 字符的地方使用插值字符串。每当内插字符串执行代码 时,就会评估插值字符串。这使您可以分隔插值字符串的定义和评估。
要在内插字符串中包含大括号(“{”或“}”),请使用两个大括号“{{”或“}}”。
*由于@Ben points out in a comment, above。 (对不起,在路上错过了。)
值得注意的是,随着[Interpolated Strings](https://msdn.microsoft.com/en-us/library/dn961160.aspx)的引入,花括号可能会在字符串中出现更多 - 在字符串的开头注意$。 [这是一个很好的解释](http://stackoverflow.com/a/32879070/340045)。 – Ben 2016-03-30 10:49:18