逸出字元完整對照表
| 逸出序列 | 字元 | Unicode | 說明 |
\' | 單引號 | U+0027 | 字元常值內使用 |
\" | 雙引號 | U+0022 | 字串常值內使用 |
\\ | 反斜線 | U+005C | 路徑常見 |
\0 | Null | U+0000 | 字串結束標記 |
\a | 警示音 | U+0007 | Console.Beep() |
\b | 退格 | U+0008 | |
\f | 換頁 | U+000C | |
\n | 換行 | U+000A | LF, Unix/Linux |
\r | 歸位 | U+000D | CR, Mac OS 9 |
\t | 定位鍵 | U+0009 | Tab |
\v | 垂直定位 | U+000B | |
\uXXXX | Unicode 16-bit | U+XXXX | 4 位十六進位 |
\UXXXXXXXX | Unicode 32-bit | U+XXXXXXXX | 8 位十六進位 |
\xHH | 十六進位 | - | 2-4 位,不建議使用 |
@逐字字串
// 關閉逸出處理,僅 "" 代表雙引號
string path = @"C:\Users\Name\Documents\File.txt";
string sql = @"SELECT * FROM Users
WHERE Name = ""John""
AND Age > 18";
string json = @"{ ""name"": ""John"", ""age"": 30 }";
// 注意:@ 字串內換行會保留換行字元 (含 \r\n)
字串插值 (C# 6+) - 現代首選
string name = "John";
int age = 30;
// 基本
string s1 = $"Name: {name}, Age: {age}";
// 格式化
string s2 = $"Age: {age:D3}"; // "Age: 030"
// 條件運算式
string s3 = $"Status: {(age >= 18 ? "Adult" : "Minor")}";
// 逸出大括號
string s4 = $"{{Literal braces}}: {name}"; // "{Literal braces}: John"
// 結合 @ 逐字字串 (C# 8+)
string sql = $@"SELECT * FROM Users WHERE Name = ""{name}""";
字串連接效能比較
| 方式 | 適用場景 | 效能 | 備註 |
+ / String.Concat | 少量、編譯期常數 | 好 (常數摺疊) | |
StringBuilder | 大量、迴圈、未知長度 | 最佳 | 預估容量 new StringBuilder(1024) |
| 插值字串 | 一般格式化 | 優 (C# 10+ DefaultInterpolatedStringHandler) | 零配置、可自訂處理器 |
string.Join | 集合連接 | 好 | 避免手寫迴圈 |
常見錯誤與最佳實務
- 檔案路徑:優先使用
Path.Combine / Path.Join 而非手工拼接
- SQL/HTML/JSON:切勿字串拼接,使用參數化查詢、編碼器、序列化器
- 跨平台換行:使用
Environment.NewLine 或 \n (現代 .NET 統一處理)
- 原始字串常值 (C# 11+):
"""...""" 多行、無逸出、縮進自動移除



本文對應《叩響 C# 之門》第 2.3.6-2.3.8 節逸出字元、@控制符、+運算符教學內容