什么是字符串内插?
字符串内插通过使用“模板”和一个/多个内插表达式将多个值合并为单个文本字符串。 内插表达式是一个变量,由一个左大括号和一个右大括号符号 { } 括起来。 当文本字符串以 $ 字符为前缀时,该字符串将变为模板。
换句话说,不是编写以下代码行:
string message = greeting + " " + firstName + "!";
而是可以将此代码行编写得更简洁:
string message = $"{greeting} {firstName}!";
在这个简单的示例中,你省去了几个按键。 你可以想象,在更复杂的操作中,字符串内插会简洁得多。 此外,很多人发现字符串内插语法更简洁、更易于阅读。
string firstName = "Bob";
string message = $"Hello {firstName}!";
Console.WriteLine(message);
// Hello Bob!
避免中间变量。
正如在上一个练习中操作的那样,我们可以消除用来存储消息的临时变量。
string firstName = "Bob";
string greeting = "Hello";
Console.WriteLine($"{greeting} {firstName}!");
合并逐字文本和字符串内插
假设你需要在模板中使用逐字文本。 可以同时使用逐字文本前缀符号 @ 和字符串内插 $ 符号。
// $@顺序不能调换
string projectName = "First-Project";
Console.WriteLine($@"C:\Output\{projectName}\Data");
// C:\Output\First-Project\Data
回顾
应在本练习中学到的主要理念:
- 字符串内插可减少某些情况下所需的字符数,与字符串串联相比实现了改进。
- 通过合并每个字符串的符号并将其用作字符串模板的前缀,可以合并字符串内插和逐字文本。
练习
// 输出
View English output:
c:\Exercise\ACME\data.txt
Посмотреть русский вывод:
c:\Exercise\ACME\ru-RU\data.txt
方式1
string projectName = "ACME";
string russianMessage = "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434";
Console.WriteLine($@"View English output:
c:\Exercise\{projectName}\data.txt");
Console.WriteLine($@"{russianMessage}:
c:\Exercise\{projectName}\ru-RU\data.txt");
方式2
string projectName = "ACME";
string englishLocation = $@"c:\Exercise\{projectName}\data.txt";
Console.WriteLine($"View English output:\n\t\t{englishLocation}\n");
string russianMessage = "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434";
string russianLocation = $@"c:\Exercise\{projectName}\ru-RU\data.txt";
Console.WriteLine($"{russianMessage}:\n\t\t{russianLocation}\n");