字符串字面量
本教程共 100 篇 · 第 13 篇 · 更新于 2026-07-31 · 约 9 分钟阅读
13. 字符串字面量
本节目标:分清四种字符串字面量写法,知道什么时候该用逐字字符串、插值字符串和原始字符串。
字符串(string)是编程里最高频的类型之一。C# 提供四种”写法”,各有地盘。选对写法,引号、斜杠、换行都不再是麻烦。
普通字符串
最常用,用双引号包住。里面的反斜杠表示转义,比如 \n 换行、\" 引号:
namespace CSharpDemo;
string msg = "你好,\n世界";
string path = "C:\\Users\\Admin"; // 每个 \ 都要写成 \\
Console.WriteLine(msg);
Console.WriteLine(path);
问题在于:一旦反斜杠多起来(比如 Windows 路径、正则),满屏 \\ 很刺眼,也容易写错。
逐字字符串(@ 前缀)
加 @ 前缀,反斜杠就当普通字符,不再转义。适合路径和正则:
string path = @"C:\Users\Admin"; // 不用写 \\
string regex = @"\d+\.\d+"; // 正则原样写
Console.WriteLine(path);
要在逐字字符串里放双引号,得写两个双引号 "" 表示一个:
string quote = @"他说:""你好"""; // 输出:他说:"你好"
Tip路径、正则、SQL 这类”反斜杠是内容本身”的文本,优先用
@"...",可读性立刻提升。第 14 章我们还会写带换行的逐字字符串。
插值字符串($):
加 $ 前缀,就能在 { } 里嵌入变量或表达式,自动拼成字符串:
string name = "小明";
int age = 18;
string info = $"姓名:{name},年龄:{age}";
Console.WriteLine(info);
{ } 里不仅可以放变量,还能写简单运算:$"明年年龄:{age + 1}"。这比用 + 拼接清爽太多,是本教程的默认拼接方式。
组合:插值 + 逐字($@)
$ 和 @ 可以叠用,变成既能插值又有逐字行为的字符串:
string folder = "Admin";
string full = $@"C:\Users\{folder}\Documents";
Console.WriteLine(full); // C:\Users\Admin\Documents
顺序无所谓,$@"..." 或 @$"..." 都行。适合”带变量、又含反斜杠”的路径拼接。
原始字符串字面量("""):C# 11 新写法
当内容里既有大量引号、又有反斜杠、还要多行时,前三种都嫌累。C# 11 引入原始字符串字面量(raw string literal),用三个双引号 """...""" 包住:
string json = """
{
"name": "小明",
"age": 18
}
""";
Console.WriteLine(json);
它的好处是:里面的引号、反斜杠全部原样,不用任何转义;还能直接跨多行。写 JSON、SQL、XML、HTML 时尤其香。
Note原始字符串的定界符
"""数量可以更多(如""""...""""),用于内容本身包含"""的极端情况。普通场景三个足够。基准 C# 14 完全支持,放心用。
插值也能进原始字符串
原始字符串同样支持插值,把 $ 放在前面即可:
string name = "小明";
string greeting = $"""你好,{name}!"欢迎"光临。""";
Console.WriteLine(greeting);
注意里面那对 "欢迎" 是普通双引号,因为原始字符串不吃转义,直接写就行。想在一个字符串里同时插值又保留引号,这是最干净的写法。
四种写法怎么选
| 场景 | 推荐写法 |
|---|---|
| 简短文字、少量转义 | 普通 "..." |
| 路径、正则(反斜杠多) | 逐字 @"..." |
| 需要嵌入变量/表达式 | 插值 $"..." |
| JSON/SQL/多行/引号多 | 原始 """...""" |
Tip别再用手动
+拼字符串了。日常用$"...";遇到复杂多行文本,立刻想到"""..."""。这是现代 C# 最省心的组合。
原始字符串的缩进规则
用 """ 时有个细节容易踩:结束的 """ 所在的列,决定了整个内容”去掉多少前导空格”。简单说,内容相对结束符缩进了多少,编译器就帮你削掉多少。
string xml = """
<root>
<item>值</item>
</root>
""";
这里每行前面有四个空格,结束符也在第四列,所以输出时那四个空格会被去掉,保留的是内容本身的层级。若结束符顶格写,则内容里所有前导空格都保留。
Note这条规则初看绕,但记住一句:让内容的缩进和结束
"""对齐,结果最直观。写多了自然就顺了。
字符串前加 @ 和 $ 的顺序
@ 和 $ 谁先谁后都合法:@$"..." 与 $@"..." 等价。团队里挑一种统一即可。个人偏好 $@,因为”这是带插值的逐字字符串”读起来顺。
Tip别在原始字符串
"""里混用$又忘记插值。若你写了$""",里面的{name}会被当插值;若没加$,花括号就当普通字符。明确你要的是哪种。
常见疑问解答
问:普通字符串里换行怎么写?
用 \n 转义:"第一行\n第二行"。若用逐字字符串 @"...",则可直接按回车键换行,更直观。但 @"..." 里 \ 不再是转义,写路径正合适。
问:原始字符串一定要三个引号吗?
至少三个,但可以更多。内容是普通 JSON/SQL 时 """ 足够;若内容里本身出现 """,就把定界符加到四个 """" 以区分。初学者记住”三个起步”即可。
问:插值字符串里能写复杂表达式吗?
能,但别太复杂。简单运算、?.、方法调用都可以;若逻辑一长,建议先算好存进变量,再插值,可读性更好。插值里也能用格式:{price:C} 直接出货币格式。
要点速记
- 普通
"..."适合短文本;@"..."适合路径/正则。 $"..."插值拼变量,日常首选。$@组合插值与逐字;"""..."""原始字符串管多行/引号。- 大量引号反斜杠的文本,原始字符串最干净。
动手练一练
- 用原始字符串
"""..."""写一段带引号和换行的 JSON,体会它免转义的好处。 - 用插值字符串
$"姓名:{name}"拼接一个变量,再改成逐字插值$@"C:\{name}"拼接路径。 - 对比普通字符串写 Windows 路径要几个反斜杠,和逐字字符串
@"..."各写一次,感受可读性差异。
插值里的格式控制
插值不只是塞变量,还能在 { } 里加格式符和对齐。比如数字补零、小数保留位数:
decimal price = 9.9m;
Console.WriteLine($"价格:{price,10:C}"); // 右对齐 10 宽,货币格式
int n = 7;
Console.WriteLine($"编号:{n:D3}"); // 007,补零到 3 位
逗号后的 10 是”最小宽度”,C/D3 是格式。这让插值既能拼值又能顺手排版,比先 ToString 再拼更紧凑。
四种写法的速查
再强调一次选择逻辑,免得你每次纠结:
- 短文字、少量转义 → 普通
"..."。 - 路径、正则(反斜杠是内容) → 逐字
@"..."。 - 要嵌入变量/表达式 → 插值
$"..."。 - JSON/SQL/多行/引号多 → 原始
"""..."""。
Tip一个实用信号:当你在字符串里开始数反斜杠、或者为了换行发愁,立刻换成
@或"""。现代 C# 给了你更省心的工具,别跟转义较劲。
小结与下一步
四种字面量不是噱头,是分别解决”转义噪音""拼接麻烦""多行引号”的痛点。插值字符串和原始字符串是 C# 现代写法的代表,早点习惯。
下一章我们动手操作字符串:拼接、截取、比较、格式化,以及大量拼接时为何要用 StringBuilder。