目录
字符串插值
C# 6引入了给字符串使用$前缀的字符串插值。下面的示例使用$前缀创建了字符串s2,这个前缀允许在花括号中包含占位符来引用代码的结果。{s1}是字符串的一个占位符,编译器将变量s1的值放在字符串s2中:
string s1 = "World";
string s2 = $"Hello, {s1}";
在现实中,这只是语法糖。对于带$前缀的字符串,编译器创建String.Format方法的调用。所以前面的代码段解读为:
string s1 = "World";
string s2 = String.Format("Hello, {0}",s1);
String.Format方法的第一个参数接受一个格式字符串,其中的占位符从0开始编号,其后是放入字符空白处的参数。
新的字符串格式要方便的多,不需要编写那么多的代码。
不仅可以使用变量来填写字符串的空白处,还可以使用返回一个值的任何方法:
string s2 = $"Hello, {s1.ToUpper()}";
这段代码可解读为如下类似的语句:
string s2 = String.Format("Hello, {0}",s1.ToUpper());
字符串还可以有多个空白处,如下所示的代码:
string s3 = $"The result of {x} + {y} is {x + y}";
解读为:
string s3 = String.Format("THe reuslt of {0} and {1} is {2}", x, y, x + y);
FormattableString
把字符串赋予FormattableString,就很容易得到翻译过来的插值字符串。插值字符串可以直接分配,因为FormattableString比正常的字符串更适合匹配。这个类型定义了Format属性(返回得到的格式字符串)、ArgumentCount属性和方法GetArgument(返回值):
int x = 3, y = 4;
FormattableString s = $"The result of {x} + {y} is {x + y}";
System.Console.WriteLine($"format: {s.Format}");
for (int i = 0; i < s.ArgumentCount; i++)
{
System.Console.WriteLine($"argument {i}: {s.GetArgument(i)}");
}
运行此代码段,输出结果如下:
format: The result of {0} + {1} is {2}
argument 0: 3
argument 1: 4
argument 2: 7
给字符串插值使用其他区域值
插值字符串默认使用当前