摘要:使用string.Formatstring msg = string.Format("My name is {0}, I am {1} years old.", name, age);
在日常开发中,字符串拼接是一个高频操作:日志记录、UI 文本渲染、SQL 拼接、报错提示……
C# 提供了多种方式来组合字符串,从最早的拼接,到string.Format,再到现在的字符串内插,让代码变得更加简洁优雅。string name = "Alice";int age = 25;
string msg = "My name is " + name + ", I am " + age + " years old.";
⚠️ 缺点:可读性差,尤其在复杂拼接时显得混乱。
使用string.Formatstring msg = string.Format("My name is {0}, I am {1} years old.", name, age);✅ 优点:比 +拼接更清晰
⚠️ 缺点:参数顺序不直观,容易写错 {0} {1}。
C# 6 引入了 字符串内插,让拼接更直观。
string name = "Alice";int age = 25;
string msg = $"My name is {name}, I am {age} years old.";只需要在字符串前加,就能在{}中直接写变量或表达式。
不仅可以放变量,还可以直接放表达式:
int a = 5, b = 3;string result = $"Sum: {a + b}, Product: {a * b}";
Console.WriteLine(result);
// 输出:Sum: 8, Product: 15
甚至支持 方法调用:
string msg = $"Current time: {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}";字符串内插与 格式化字符串完美结合。
数字格式化double price = 1234.567;string msg = $"Price: {price:F2}";
// 输出: Price: 1234.57日期格式化DateTime now = DateTime.Now;
string msg = $"Today: {now:yyyy/MM/dd}";对齐输出-10表示左对齐,占 10 个字符宽度。✅ 多行内插字符串
从 C# 11开始,可以用原始字符串字面量结合内插:
string name = "Alice";string JSON = $$"""
{
"Name": "{{name}}",
"Age": 25
}
""";
Console.WriteLine(json);
这种写法对生成 JSON/XML/SQL特别友好。
✅ 与Span结合的高性能字符串内插C# 10 引入了 插值字符串处理器,可以避免不必要的字符串分配,提升性能。例如:
public void LogMessage(FormattableString message){
Console.WriteLine(message.ToString);
}
LogMessage($"User {name} logged in at {DateTime.Now}");FormattableString可以延迟格式化,甚至直接转换为 SQL 参数化查询,提升性能和安全性。
来源:opendotnet